Ultrawingrid - Выберите строку на основе уникального значения

Есть ли способ выбрать строку в ультра-крылец на основе значения одного из ее столбцов (столбца ID)? Я безуспешно пытался выяснить, как это сделать.

У меня есть глобальная переменная, которая является «активным идентификатором» (то есть идентификатором, который в настоящее время редактируется в приложении - это идентификатор, который система считает выбранным и активным), но иногда выбранная строка сетки и Переменная selected ID не совпадает. Мне нужно убедиться, что они одинаковы, чтобы не вводить пользователей в заблуждение. Я надеюсь вызвать следующий код внутри функции refresh () ...

Возможно, что-то вроде (вроде-псевдокода):

int index; // This could be any number

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

Я думаю в правильном направлении? Если да, то каков правильный синтаксис? Если нет, то как еще мне это сделать?


person Mike Baxter    schedule 06.03.2013    source источник


Ответы (4)


Понятно.

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

Работает именно так, как мне нужно - извините за ответ на мой собственный вопрос;)

person Mike Baxter    schedule 06.03.2013
comment
Добавьте break; в свой цикл, чтобы выйти, когда вы найдете значение - person Steve; 06.03.2013

да. Вы можете использовать функцию FirstOrDefault, чтобы найти строку, соответствующую критерию:

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

Теперь, когда у вас (потенциально) есть строка, в которой ячейка содержит желаемое значение, вы можете активировать ее, чтобы выбрать ее:

if (row != null)
row.Activate();
person Eduardo Quiroz Cosme    schedule 14.12.2015
comment
Не могли бы вы добавить объяснение к ответу, состоящему только из кода, чтобы он имел смысл для людей, желающих понять решение, пожалуйста? - person JB King; 15.12.2015

Если вы привязаны к DataTable или списку, в котором есть возможность найти элемент по ключу, вы можете использовать GetRowWithListIndex коллекции RowsRow.

Например, следующее активирует строку с ключом 5:

DataTable dt = this.ultraGrid1.DataSource as DataTable;
DataRow dr = dt.Rows.Find(5);
this.ultraGrid1.Rows.GetRowWithListIndex(dt.Rows.IndexOf(dr)).Activate();

Если ваш список не поддерживает поиск элемента по ключу, вы также можете использовать linq для поиска элемента в списке. Пример поиска элемента со ссылкой здесь.

person alhalama    schedule 07.03.2013

Если у вас несколько диапазонов, вы можете использовать следующее:

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, и активировать его тогда.

person Marc    schedule 23.04.2016