2013-04-22 76 views
0

我的datagridview有2列。 列0包含處於關閉位置的複選框(默認)。用戶可以單擊該框並更改狀態或選中。如何確定在datagridview中的哪些單元格被檢查?

如何循環並找到被檢查的人。這裏是我的代碼

try 
{ 
    // This line will cause InvalidCastException 
    // Specified cast is not valid. 
    if ((bool)(row.Cells[0]).Value || (CheckState)row.Cells[0].Value == CheckState.Checked) 
    { 
     // Do something 
     MessageBox.Show("Checked"); 
    } 
} 
catch (NullReferenceException nre) 
{ 
    MessageBox.Show("No Rows Have Been Checked"); 
} 

回答

1

什麼:

foreach(DataGridViewRow row in dataGridView.Rows){ 
    if (row.Cells[0].Value != null && (bool)row.Cells[0].Value){ 
     //checked, do something 
    } 
} 
+0

我測試了這個。我有數字1 - > 10的單元格。我檢查了1,2,3,然後創建了一個新列表並將它們添加到列表中。我的新名單隻包含1,2。 3丟失 – 2013-04-23 13:34:48

+0

您對我的問題所做的修改會導致InvalidCastException – 2013-04-23 14:36:03

+0

如果我將Value更改爲State,它將不會進入循環 – 2013-04-23 14:37:57

1

請參閱從this answer一行程序:

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList(); 

這會給你這有複選框選中所有行的列表。

+0

的CheckBoxColumn1.Name,這是該列或實際名稱索引? – 2013-04-22 16:16:04

+0

這就是列名 – Geoff 2013-04-22 16:20:46

+0

我從來沒有用過這種方式。有沒有簡單的方法來使用你的1班輪獲得所有選定的行,並使用選定的行是datagridview的新數據源(因此只顯示已檢查的行)。 – 2013-04-22 16:26:42

相關問題