2010-07-20 57 views
3

我是LINQ新品牌,我正試圖在當前的愛好項目中使用它。我有一個datagridview其中每行的第一個單元格是datagridviewcheckbox,第4個單元格是一個字符串。LINQ在DataGridView中選擇某個單元,具體取決於行中的其他單元格

如果複選框被選中,我需要將第4個單元格的值添加到列表中。

起初我想:

var selectedID = from c in multiContactLookup.SelectedCells.Cast<DataGridViewCell>() 
           select multiContactLookup.Rows[c.RowIndex].Cells[4].Value; 

這並沒有工作,因爲檢查細胞編程未選中所以c是從來沒有的值。

然後我嘗試:

var sel2 = from r in multiContactLookup.Rows.Cast<DataGridViewRow>() 
         where r.Cells[0].Value is true select r.Cells[4].Value; 

但不知何故,我的語法是錯誤的。

使用LINQ,我怎樣才能選擇第一個單元格被檢查的行,然後選擇第一個單元格的值?我必須將其分成兩個集合嗎?

謝謝!

回答

8

我認爲這應該工作:

IEnumerable<string> values = multiContactLookup.Rows.Cast<DataGridViewRow>() 
    .Where(row => (bool)row.Cells[0].Value) 
    .Select(row => (string)row.Cells[3].Value); 
2

也許不是你一直在尋找的答案,但...

DataGridView(因爲大多數雙贏的形式控制)是不是最好的來源從LINQ開始。大多數收集不實現正確的IEnumerable<T>接口。這就是爲什麼您需要Cast()解決方法的原因。

通常,嘗試將您的應用程序行爲從控件移到數據中。也許你的網格連接到DataTable。在這種情況下,請註冊DataTable的事件以更改數據,並使用DataRow而不是DataGridViewRow及其單元格的值。

相關問題