XtraGrid硬编码列的值之一并使用自动过滤器

时间:2011-12-13 13:14:48

标签: winforms dataset devexpress xtragrid

我有一个绑定到从存储过程填充的数据集的网格。 数据集(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 ......

1 个答案:

答案 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>