2012-08-16 34 views
1

我在WinForms應用程序中有一個datagridview,並且我希望所有列欄都被鎖定爲編輯狀態。這我能夠實現與下面的代碼:在DataGridView中只讀列和行

foreach (DataGridViewColumn col in myGrid.Columns) 
{ 
    if (col.Name == "LockedColumn") 
    { 
     col.ReadOnly = false; 
    } 
    else 
    { 
     col.ReadOnly = true; 
    } 
} 

不過,我還需要一個條件鎖定在此列,這取決於每行中其他地方的值。我試了下面的代碼:

foreach (DataGridViewRow row in myGrid.Rows) 
{ 
    if ((bool)row.Cells["ConditionalColumn"].Value == false) 
    { 
     row.ReadOnly = false; 
    } 
    else 
    { 
     row.ReadOnly = true; 
    } 
}  

但是,這鎖定了整個網格,這不是我想要的。我以後的表格可能會更清晰一些。

可樂COLB COLC

ROW1真值1

2行假值2

ROW3真值3

我想列一個&乙鎖定(只讀)的全部,默認Col C允許編輯,除非列B中的值爲false。因此在上面的例子中,只有value1和value3是可編輯的。

但是,我似乎無法實現這一點,因爲如上所述,如果我通過條件將readonly設置爲false的行遍歷,所有內容都將被鎖定。

+0

這是您的項目的實際代碼?你不能將一個datagridview單元轉換爲bool,所以這段代碼不應該編譯。也不清楚你的問題是什麼。你是說當你只讀一行時,整個網格變成只讀?這不會發生。 – 2012-08-16 10:54:23

+0

爲什麼所有降價 - 我的問題到底是怎麼回事? – PJW 2012-08-16 11:41:20

+0

我沒有downvote - 人們感到驚訝,但也許是非編譯代碼是原因。希望如果您從項目中發佈實際代碼,人們將刪除downvotes。 – 2012-08-16 11:45:25

回答

0

這是下面這行,這是問題

row.ReadOnly = false; 

當改爲

row.Cells["colName"].ReadOnly = false; 

它作爲intende d

2

您顯示的代碼不應該編譯,也不能正確檢查DataGridView中布爾單元格中的值。

如果你改變你的代碼的行看東西像下面的代碼,那麼你應該能夠設置單獨的行僅讀取基於列:

foreach (DataGridViewRow row in myGrid.Rows) 
{ 
    if (row.Cells["ConditionalColumn"].Value == null || (bool)row.Cells["ConditionalColumn"].Value == false) 
    { 
     row.ReadOnly = false; 
    } 
    else 
    { 
     row.ReadOnly = true; 
    } 
}