【问题标题】:How to show data in DataGridView in C#如何在 C# 中的 DataGridView 中显示数据
【发布时间】:2020-03-02 23:01:21
【问题描述】:

我有这门课。我想从数据库中获取数据(它正在工作)。使用数据库中的数据从类 person 中创建一个变量 p 并将其显示在 dataGridView 中(这不起作用)。

public class person {
    public int id { get; set; }
    public string fname { get; set; }
    public string sname { get; set; }
    public string lname { get; set; }
    public string address { get; set; }
    public string username { get; set; }
    public string pass1 { get; set; }
    public string pass2 { get; set; }
    public string email { get; set; }

    public person(int id, string fname, string sname, string lname, string address, string username, string pass1, string pass2, string email)
    {
        this.id = id;
        this.fname = fname;
        this.sname = sname;
        this.lname = lname;
        this.address = address;
        this.username = username;
        this.pass1 = pass1;
        this.pass2 = pass2;
        this.email = email;
    }
}

我从数据库中读取数据并将其设置在变量 p 中;

if (reader.HasRows)
{
    reader.Read();
    id = reader.GetInt32(0);
    fname = reader.GetString(1);
    sname = reader.GetString(2);
    lname = reader.GetString(3);
    address = reader.GetString(4);
    username = reader.GetString(5);
    pass1 = reader.GetString(6);
    pass2 = reader.GetString(7);
    email = reader.GetString(8);
    MessageBox.Show("Username found!");
    // Call Close when done reading.
    reader.Close();
    person p = new person(id, fname, sname, lname, address, username, pass1, pass2, email);
    dataGridView1.DataSource = p;
}

但数据未显示在 dataGridView 中。

【问题讨论】:

  • 而不是 DataReader,填充 DataTable 并使用 that 作为 DataSource。发布的方式只会显示一行。
  • 是的,我只想显示一行
  • 我搜索一个用户名,当找到时我想在 dataGridView 中显示这个用户名的数据
  • 关键信息应该在您的帖子中;也不清楚问题是什么。作为惯例,我仍然会用所有人员/学生/项目填充 DataTable,然后使用 RowFilter 来显示正在搜索的人

标签: c# database datagridview


【解决方案1】:

来自Microsoft Docs

DataGridView 类支持标准的 Windows 窗体数据绑定模型。这意味着数据源可以是实现以下接口之一的任何类型:

IList 接口,包括一维数组。

IListSource 接口,例如 DataTable 和 DataSet 类。

IBindingList接口,如BindingList类。

IBindingListView接口,如BindingSource类。

您可以尝试将人员列表而不是单个人员传递给 DataGridView:

var persons = new List<person>() {
    new person(id, fname, sname, lname, address, username, pass1, pass2, email)
};
var bindingList = new BindingList<Person>(list);
var source = new BindingSource(bindingList, null);
dataGridView1.DataSource = source;

【讨论】:

  • 如果您不直接将人员列表分配给 DataSource,而是分配了一个 BindingSource,那么当您对列表进行更改时,您将不需要重新绑定 DataGridView。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
相关资源
最近更新 更多