2013-03-06 60 views
2

有沒有一種方法可以根據其中一列(ID列)的值選擇UltraWire行中的一行?我一直在試圖找出如何做到這一點,並取得一點成果。Ultrawingrid - 根據唯一值選擇行

我有一個全局變量,它是'活動ID'(即當前在應用程序中正在編輯的ID - 它是系統認爲被選中並激活的ID) - 但有時會選中網格和「選定ID」變量不匹配。我需要確保他們是相同的,以防止用戶混淆。我希望能調用刷新()函數中的以下代碼...

也許類似(有點僞碼-ISH):

int index; // This could be any number 

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

上午我沿着正確的線路在想什麼?如果是這樣,那麼正確的語法是什麼?如果不是,我該怎麼做呢?

回答

3

明白了。

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

作品只是我怎麼需要它 - 對不起,回答我的問題;)

+4

添加一個'break;'到你的循環當你找到值時退出 – Steve 2013-03-06 16:08:01

+0

思考好的史蒂夫,謝謝:) – 2013-03-07 12:23:28

0

如果您綁定到數據表或具有由鍵,你可以找到一個項目的能力清單使用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在列表中找到的物品好。有一個例子找到鏈接here的項目。

3

是的。您可以使用FirstOrDefault功能找到匹配的行標準:

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

現在你(可能)有其中該細胞含有你想要的值的行,你可以激活它,選擇它:

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

你能否給代碼唯一的答案增加一些解釋,所以對於想要了解解決方案,請嗎? – 2015-12-14 22:38:22

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