当我打开表单时,我将一堆行添加到绑定到DataGridView的DataSet中。稍后,当我在我的DataGridView中枚举行时,我想访问一些用于填充DataSet但未存储在DataSet中的数据。
这样的事情:
public void OnStartup()
{
foreach (var data in GetData())
{
var row = MyDataSet.MyTable.AddRow(data.Value);
// here's the part where I'm not sure what to do.. ideally:
row.GetDataGridViewRow().Tag = data.Metadata;
}
}
public void LaterOn()
{
foreach (var row in MyDataGridView.GetSelected())
{
var metadata = (Metadata)row.Tag; // or something
...
}
}
将一些元数据附加到DataSet或DataGridView行的最佳方法是什么?
答案 0 :(得分:1)
我会说,这是没有单一'正确'方式的情况之一,只是根据具体情况选择方法。
使用像这样的DataGridView
Tag
属性没有任何问题。实际上,正如MSDN上所述,这就是它的目的:
Tag属性可以存储您要关联的任何对象 乐队。此属性通常用于存储标识 信息,例如字符串名称,唯一标识符(例如, 一个Guid),或者数据库中乐队数据的索引。
我要考虑的另一种选择是将BindingList<T>
与自定义支持对象一起用作DataSource
而不是DataSet
,并将元数据存储在支持对象中。然后,您可以使用DataGridViewRow
的{{1}}属性访问每个对象。
我会稍微偏爱这种方式,因为它会使数据和UI保持分离,这意味着即使只有后备对象也可以获取元数据,但我怀疑在数据方面存在任何具体差异性能或内存使用情况。