反正是否只将类的特定值绑定到数据网格?

时间:2012-07-18 17:29:57

标签: c# datagrid

有时,我通常会创建一个具有我想要的数据类型的类:

public class message{
    private string subject { get; set; }
    private string message { get; set; }
}

这样,我可以将List<message>绑定到数据网格并更改DataPropertyName

但是,如果我碰巧为这个类添加了更多的自动属性,我的数据网格开始行为不端,有时我不仅仅想要一些属性到数据网格。无论如何,我可以将数据网格绑定到我选择的值DataPropertyName

感谢。

2 个答案:

答案 0 :(得分:2)

如果您不希望数据网格中有额外的列,为什么不从查询开始,也不要在SELECT子句中列出它们。这有减少网络流量的额外好处。

在同一个表格中创建多个查询或视图,并在合适的时间使用正确的查询或视图以满足您的需要。这是“上游”解决方案。

或者,

  

当AutoGenerateColumns属性设置为true时,每列   自动将其DataPropertyName属性设置为a的名称   由...指定的数据源中的属性或数据库列   DataSource属性。此绑定也可以手动执行,   当您只想显示的子集时,这非常有用   数据源中可用的属性或数据库列。在这样的   例如,将AutoGenerateColumns属性设置为false,然后   手动添加每个DataGridViewColumn,设置每个值   DataPropertyName属性为属性或数据库列   要显示的数据源。

直接来自MSDN,你应该在发布之前进行更彻底的研究。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.datapropertyname.aspx

答案 1 :(得分:0)

您可以创建一个提供DataView的方法。

说你有这样的事情:

public class message {
    private string subject { get; set; }
    private string message { get; set; }
    private string otherValue { get; set; }
}

然后你可以在消息类中添加这样的方法:

public static DataView GetDataGridList(List<message> lstMessages) {
    DataTable dt = new DataTable();
    // Add the columns here for whatever properties you want
    dt.Columns.Add("subject");
    dt.Columns.Add("message");

    foreach (message msg in lstMessages) {
        DataRow dr = dt.NewRow(); // I think that's the call, I'm doing this off the top of my head, sorry.
        dr["subject"] = msg.subject;
        dr["message"] = msg.message;
    }

    return (dt.DefaultView);
}

然后在创建DataGrid时,只需将其绑定为:

List<message> lstMessages = new List<message>();
// Populate the list however you want here.
DataGrid dg = new DataGrid();
dg.DataSource = message.GetDataGridList(List<message>);

你应该好好去。请记住,如果您更改了所需的属性,将列添加到DataTable,然后在foreach循环内。