有时,我通常会创建一个具有我想要的数据类型的类:
public class message{
private string subject { get; set; }
private string message { get; set; }
}
这样,我可以将List<message>
绑定到数据网格并更改DataPropertyName
。
但是,如果我碰巧为这个类添加了更多的自动属性,我的数据网格开始行为不端,有时我不仅仅想要一些属性到数据网格。无论如何,我可以将数据网格绑定到我选择的值DataPropertyName
?
感谢。
答案 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循环内。