2013-03-06 4 views
2

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

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

Может быть что-то вроде (вроде-псевдокод-МОГ):

int index; // This could be any number 

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

Могу ли я думать в правильном направлении? Если да, то какой правильный синтаксис? Если нет, как еще я должен это делать?

ответ

3

Got it.

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

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

+4

Добавить 'break;' в ваш цикл, чтобы выйти, когда вы нашли значение – Steve

+0

Хорошее мышление steve, спасибо :) –

0

Если вы привязаны к DataTable или список, который имеет возможность найти элемент по ключу, вы можете используйте метод GetRowWithListIndex коллекции Rows, чтобы найти 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, чтобы найти элемент в списке, как Что ж. Ниже приведен пример поиска элемента со ссылкой here.

3

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

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

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

if (row != null) 
row.Activate(); 
+0

Не могли бы вы добавить некоторое объяснение в ответ только на код, так что это имеет смысл для людей, желающих понять решение, пожалуйста? –

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(); 

Примечание: (?) Null-условный оператор требует C# 6.0 или выше. В противном случае вам нужно проверить, если FirstOrDefault(...)!=null и активировать его.