0

有时,我通常会使用我想要的数据类型创建一个类,如下所示:

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

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

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

谢谢。

4

2 回答 2

2

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

在同一张表上创建多个查询或视图,并在正确的时间根据您的需要使用正确的查询或视图。这是“上游”解决方案。

或者,

当 AutoGenerateColumns 属性设置为 true 时,每列会自动将其 DataPropertyName 属性设置为 DataSource 属性指定的数据源中的属性或数据库列的名称。此绑定也可以手动执行,当您只想显示数据源中可用的属性或数据库列的子集时,这很有用。在这种情况下,请将 AutoGenerateColumns 属性设置为 false,然后手动添加每个 DataGridViewColumn,将每个 DataPropertyName 属性的值设置为要显示的数据源中的属性或数据库列。

That is straight from MSDN, you should have researched a little more thoroughly before posting this. http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.datapropertyname.aspx

于 2012-07-18T18:02:22.147 回答
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 循环中。

于 2012-07-18T17:50:33.807 回答