【问题标题】:How do I present the contents of my object in DataGridView in C#?如何在 C# 中的 DataGridView 中呈现我的对象的内容?
【发布时间】:2013-09-27 20:42:45
【问题描述】:

这是我的代码:

void Main() {
    List<Restaurant> restaurants = new List<Restaurant>();
}

class Restaurant {
    public int Id;
    public List<Complaint> Complaints = new List<Complaints>();
}

class Complaint {
    public string Name;
    public string Address;
    public int Age;
    public DateTime ComplaintDate;
}

我想在 DataGridView 控件中显示 RestaurantData 中包含的数据,它是 Restaurant 类的一个对象。首先,我想显示餐厅的 ID,然后是针对餐厅的投诉数量,使其看起来像这样(ID 在 A 列,名称在 B 列,依此类推):

  • 身份证姓名地址年龄日期
  • 姓名地址年龄日期
  • 姓名地址年龄日期

我过去对 DataGridView 的使用仅限于 dataGridView1.DataSource = (some array)。但是,这次我要呈现的信息显然不是数组,所以我被卡住了。

【问题讨论】:

  • 你在寻找类似this的东西吗?
  • 我认为这是 WinForms,因为您之前的问题是 Winforms 是否正确?
  • 那个答案应该有。抱歉花了一点时间,我在回答中被拉走了。

标签: c# winforms datagridview


【解决方案1】:

如果您想将列剔除到您自己的列表中,可以使用以下方法:

private void AddColumns()
{
    dataGridView1.AutoGenerateColumns = false;
    DataGridViewTextBoxColumn ageColumn =
        new DataGridViewTextBoxColumn();
    ageColumn.Name = "Age";
    ageColumn.DataPropertyName = "Age";
    ageColumn.ReadOnly = true;

    DataGridViewTextBoxColumn nameColumn =
        new DataGridViewTextBoxColumn();
    nameColumn.Name = "Name";
    nameColumn.DataPropertyName = "Name";
    nameColumn.ReadOnly = true;

    DataGridViewTextBoxColumn addressColumn =
        new DataGridViewTextBoxColumn();
    addressColumn.Name = "Address";
    addressColumn.DataPropertyName = "Address";
    addressColumn.ReadOnly = true;

    DataGridViewTextBoxColumn dateColumn =
        new DataGridViewTextBoxColumn();
    addressColumn.Name = "Date";
    addressColumn.DataPropertyName = "Date";
    addressColumn.ReadOnly = true;

    dataGridView1.Columns.Add(ageColumn);
    dataGridView1.Columns.Add(nameColumn);
    dataGridView1.Columns.Add(addressColumn);
    dataGridView1.Columns.Add(dateColumn);

    var ds = (from r in restaurants
              from c in r.Complaints
              select new {Id = r.Id, Address =c.Address, Age = c.Age, Name = c.Name, Date = c.ComplaintDate}
             ).ToList();
    dataGridView1.DataSource = ds;
}

如果您只想自动生成列,请尝试以下操作:

private void AddColumns()
{
    dataGridView1.AutoGenerateColumns = true;

    var ds = (from r in restaurants
              from c in r.Complaints
              select new {Id = r.Id, Address =c.Address, Age = c.Age, Name = c.Name, Date = c.ComplaintDate}
             ).ToList();
    dataGridView1.DataSource = ds;
}

【讨论】:

  • 这如何解决 OP 所说的主从(嵌套网格)问题?
  • @HighCore 当我被拉走时,我正在处理这个问题。更新后的答案应该有。
  • 我不确定这就是 OP 想要的。我想我们将不得不要求澄清。顺便说一句,this 就是我说“大师/细节”时的意思
  • OIC.. Hrm... 确实需要更多说明。
  • 对不起,伙计们,我有另一项任务使我无法回答这个问题。感谢您的回复。需要一些时间来处理和理解 paqogomez 写的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2021-05-16
  • 2013-11-29
  • 2014-07-10
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多