我有一个绑定到从存储过程填充的数据集的网格。 数据集(InstrumentName)的其中一列不是从存储过程中获取的,而是空的。
我想将此列的每一行的值设置为某个值,具体取决于另一列的值(Id)。我有一个名单和ID的列表在memony中,我想硬编码从我的列表中设置名称。
当我在Initialized()方法中执行此操作时,我可以在调试中看到值已设置,但它们不在网格上。似乎网格重新绘制,我的设定值丢失..
我在Initialized()中运行此循环:
for (int i = 0; i < view.DataRowCount; i++)
{
object Uic = view.GetRowCellValue(i, view.Columns["Uic"]);
int UicInt = 0;
if ((Uic != null) && (int.TryParse(Uic.ToString(), out UicInt)))
view.SetRowCellValue(i, view.Columns["InstrumentName"], GetName(UicInt));
}
我也试过在DataMonitorGridViewCustomColumnDisplayText()上做(没有循环)但没有成功..
最后,我需要能够对新值使用AutoFilterRow。到目前为止,一切皆有可能,但不是AutoFiltering ......
答案 0 :(得分:2)
我建议从存储过程中填充一个集合。然后,您可以将该集合用作网格的数据源。创建一个具有所有适当属性的类,包括您将从您自己的内存中集合中分配值的InstrumentName。
<强>更新强>
根据下面的评论 - 我相信你可以在添加行时使用DataRow.RowChanged事件来触发。然后抓住你想要的'Id',查询你的内存中的集合。
我仍会回到原来的建议。因为DataTables是松散类型的,所以强类型类会更加灵活并确保数据完整性。如果您的DataTable具有列Foo(数据类型:int),Bar(数据类型:字符串)和Baz(数据类型:字符串),则创建一个模仿该结构的类:
public class FooBarBazEntity{
public int Foo { get; set; }
public string Bar { get; set; }
public string Baz { get; set; }
}
您可以使用LINQ轻松填写一个集合 - IList<T>
或IEnumerable<T>
。