Ultrawingrid -根据唯一值选择行
本文关键字:选择 唯一 -根 Ultrawingrid | 更新日期: 2023-09-27 18:02:46
是否有一种方法可以根据其中一个列(ID列)的值在ultrawingrid中选择一行?我一直在努力寻找如何做到这一点,但收效甚微。
我有一个全局变量是"活动ID"(即当前正在应用程序中编辑的ID -它是系统认为被选中和活动的ID) -但有时网格的选定行和"选定ID"变量不匹配。我需要确保它们是相同的,以防止用户混淆。我希望在refresh()函数中调用以下代码…
可能像(kind -pseudo-code-ish):
int index; // This could be any number
foreach (row r in grid)
{
if (row.cell["ID"].value = index)
grid.selectedindex = thisRow;
}
我想的对吗?如果是,正确的语法是什么?如果没有,我该怎么做呢?
明白了
int index;
foreach (UltraGridRow row in grid.Rows)
{
if (Convert.ToInt32(row.Cells["ID"].Value) == index)
{
grid.ActiveRow = row;
break;
}
}
就像我需要的那样工作-抱歉回答我自己的问题;)
是。您可以使用FirstOrDefault
函数查找符合条件的行:
var row = ultraGrid1.Rows.FirstOrDefault(r => r.Cells["Id"].Value.ToString() == "1");
现在您(可能)已经有了单元格中包含您想要的值的行,您可以激活它以选择它:
if (row != null)
row.Activate();
如果绑定到具有按键查找项的DataTable或列表,则可以使用Rows集合的GetRowWithListIndex方法来查找UltraGridRow。
例如,下面的代码将使用键值5激活行:
DataTable dt = this.ultraGrid1.DataSource as DataTable;
DataRow dr = dt.Rows.Find(5);
this.ultraGrid1.Rows.GetRowWithListIndex(dt.Rows.IndexOf(dr)).Activate();
如果你的列表不支持按键查找项目,你也可以使用linq在列表中查找项目。这里有一个查找带有链接的项目的示例。
如果您有多个频带,您可以使用以下命令:
int index;
ultraGrid1.DisplayLayout.Bands.OfType<Infragistics.Win.UltraWinGrid.UltraGridBand>()
.SelectMany(s => s.GetRowEnumerator(Infragistics.Win.UltraWinGrid.GridRowType.DataRow)
.OfType<Infragistics.Win.UltraWinGrid.UltraGridRow>())
.Where(s => s.Cells.Exists("ID"))
.FirstOrDefault(s => (int)s.Cells["ID"].Value == index)?
.Activate();
注意:空条件运算符(?)需要c# 6.0或更高版本。否则,您必须检查,如果FirstOrDefault(...)!=null
并激活它,然后。