【发布时间】:2011-02-23 10:01:21
【问题描述】:
使用下面的代码,我试图在不依赖实际数据库列名的知识的情况下自定义 DGV。但它不起作用。我能知道正确的方法是什么吗?谢谢。
public class MyDataTable : DataTable { ... }
public class MyDataRow : DataRow
{
public FirstProperty { get; set; }
public SecondProperty { get; set; }
public ThirdProperty { get; set; }
}
void LoadDataGridView()
{
DataGridViewTextColumn colFirst = new DataGridViewTextColumn();
dgv.AutoGenerateColumns = false;
...
colFirst.HeaderText = "First Property";
colFirst.DataPropertyName = "FirstProperty"; // doesnt work ?
...
...
dgv.Columns.AddRange = { ... };
dgv.DataSource = new BindingSource(mydatatable);
}
【问题讨论】:
-
为什么不直接将 DGV 绑定到数据表并重命名列标题?
-
@Kamyar 如前所述,目标是从 UI 实现中隐藏实际的数据库列名称。
-
如果你在到处乱扔
DataTable,IMO 你已经混合了数据和 UI。您需要某种基于对象的域模型来避免这种情况。 -
@Marc Gravell 好.. 我同意你的观点,但我想看看 .NET 是否有任何我可以最小化它的东西。
-
没有。没有用您自己的类型对象包装每一行;在这种情况下它不会。通常的工具库完全由 ITypedList 解除。
标签: c# datagridview datatable datarow