2013-03-19 79 views
3

我有一個datagridview顯示一些數據。數據之間有一些行separator rows所以這些都是readonly。在某些情況下,整個datagridview可能是readonly。但是當我將其切換回readonly = false時,所有行都是可編輯的。是否有可能無法再手動設置每行的readonly屬性,我的排又回到了以前的狀態?的DataGridView只讀「錯誤」

+0

= true?......... – Sayse 2013-03-19 19:51:52

+0

是啊......對不起,我的意思是將readonly = false的單元格設置爲readonly = false,而readonly = true則爲readonly = true。我很抱歉不清楚 – 2013-03-19 19:55:19

回答

4

至於我可以看到使用反射器,設置DataGridView.ReadOnlytrue還將設置ReadOnlyfalse在網格中的所有行和列 - 大概是假設你永遠隨後要再次設置DataGridView.ReadOnlyfalse

所以我可以看到你爲了避開這個唯一的辦法,就是「記住」這行應該由DataGridViewRow.Tag設置一個合適的值,然後使用該手動還原ReadOnly狀態是隻讀的,例如。然而,它似乎很清楚

void DataGridView_ReadOnlyChanged(object sender, EventArgs e) 
{ 
    DataGridView dataGridView = (DataGridView) sender; 
    if (!dataGridView.ReadOnly) 
    { 
     // DataGridView.ReadOnly has just been set to false, so we need to 
     // restore each row's readonly state. 
     foreach(DataGridViewRow row in dataGridView.Rows) 
     { 
      if (row.Tag != null && ((bool)row.Tag)) 
      { 
       row.ReadOnly = true; 
      } 
     } 
    } 
} 

例如,如果你設置的DataGridViewRow.Tag屬性true爲只讀行,你可以處理DataGridView.ReadOnlyChanged事件與處理程序,看起來像下面未經測試的代碼該DataGridView沒有設計成允許其ReadOnly屬性來以這種方式進行切換。也許你可以設計自己的應用程序,讓你永遠不要需要設置DataGridView.ReadOnlytrue

例如,如果要防止用戶通過雙擊單元格編輯,你可以設置DataGridView.EditModeDataGridViewEditMode.EditProgramatically,而不是設置DataGridView.ReadOnlytrue

+0

或者,我相信你可以切換'。啓用'而不更改單獨的行'.ReadOnly'值。 – JosephHirn 2013-03-20 11:53:55

+0

@Ginosaji,看到更新,切換'EditMode'可能比切換'Enabled'好,因爲大概這仍然允許您從網格中選擇值。 – Joe 2013-03-20 11:55:46

+0

我會嘗試看看EditMode 或者我將不得不再次循環遍歷所有行,將它們設置爲 – 2013-03-20 13:19:33

0

如果類自己實現,那麼你可以設置你的DataGrid1.ReadOnly = true,使這些需要是隻讀屬性爲只讀。

這樣的:

string _myProperty; 
public string MyProperty 
{ 
    get{return _myProperty;} 
} 
+0

我沒有實現類,但datagridview沒有綁定。我用我的代碼 – 2013-03-19 20:14:44

+0

填寫它可以提供代碼來填充DataGrid嗎? – Dilshod 2013-03-19 20:17:35

+0

這是一個很長的代碼。我真的沒有看到任何用它來發布它,所以這就是爲什麼我沒有把它包含在原來的帖子 – 2013-03-19 20:19:40

0

如果通過手工填寫在DataGridView的代碼,而不是將它綁定到數據源,那麼你可以一排的只讀屬性只需設置爲true,當你添加它。

如果上述方法不起作用,那麼我不明白你的代碼實際上做了什麼,就像@Dilshod說過,如果你發佈它,或者至少與它的要點(http://www.gist.github.com)聯繫起來會很方便。

+0

這就是我所做的。我在創建行時設置了只讀屬性。但是在某些情況下,datagridview只能讀取(全部),但是某些用戶有能力將其重新設置爲readonly = false,並且當他們這樣做時,整個網格變爲readonly = false,即使是未被編輯爲可編輯的行在所有 – 2013-03-20 11:14:48