2

有没有办法根据其中一列(ID 列)的值在超翼网格中选择一行?我一直试图找出如何做到这一点,但收效甚微。

我有一个全局变量,它是“活动 ID”(即当前正在应用程序中编辑的 ID - 它是系统认为被选中和活动的 ID) - 但有时网格的选定行和“选定 ID”变量不匹配。我需要确保它们相同,以防止用户混淆。我希望在 refresh() 函数中调用以下代码...

也许像(有点像伪代码):

int index; // This could be any number

foreach (row r in grid)
{
    if (row.cell["ID"].value = index)
        grid.selectedindex = thisRow;
}

我的想法是否正确?如果是这样,正确的语法是什么?如果没有,我还应该怎么做?

4

4 回答 4

3

知道了。

            int index;
            foreach (UltraGridRow row in grid.Rows)
            {
                if (Convert.ToInt32(row.Cells["ID"].Value) == index)
                {
                    grid.ActiveRow = row;
                    break;
                }
            }

就像我需要的那样工作 - 很抱歉回答我自己的问题;)

于 2013-03-06T14:37:37.063 回答
3

是的。您可以使用该FirstOrDefault函数查找符合条件的行:

var row = ultraGrid1.Rows.FirstOrDefault(r => r.Cells["Id"].Value.ToString() == "1");

现在您(可能)拥有单元格包含您想要的值的行,您可以激活它来选择它:

if (row != null)
row.Activate();
于 2015-12-14T22:10:36.450 回答
1

如果您绑定到能够通过键查找项目的 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 在列表中查找项目。有一个在此处查找带有链接的项目的示例。

于 2013-03-07T22:09:29.787 回答
0

如果您有多个乐队,您可以使用以下内容:

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然后激活它。

于 2016-04-23T11:58:25.133 回答