2009-05-27 42 views
7

我有一個DataGridView,它沒有設置爲ReadOnly。它的列沒有設置爲ReadOnly,並且它所綁定的對象沒有設置爲ReadOnly。但是,我無法編輯DataGridView項目? DataGridView的.DataSource屬性設置爲ReadOnlyCollection>,但我可以通過編程方式更改元素,而不是從用戶界面。這是怎麼回事?爲什麼我不能編輯我的DataGridView中的值,即使它沒有設置爲ReadOnly?

+0

你是如何編輯元素的?你認爲你應該看到你沒有看到的行爲是什麼? – David 2009-05-27 12:33:37

回答

9

事實證明,如果你的DataGridView綁定到一個ReadOnlyCollection,那麼即使你可以通過編程集合中編輯任何項目,在DataGridView將限制您更改的值。我不確定這種行爲是否是故意的,但是有一點需要注意。

+0

無法重現...請參閱下文。使用ReadOnlyCollection <>無可編輯... – 2009-05-27 12:32:21

+1

我的不好,事實證明,「可以改變的一列」實際上並未正確地綁定到數據源。 – GWLlosa 2009-05-27 14:03:12

3

這僅僅是一個擴展註釋(因此維基)在櫃檯的「在DataGridView會限制你更改一些值(字符串),而不是其他值(布爾變量)」點;既不可編輯;使它成爲一個List<T>無一不是可編輯...:

using System; 
using System.Collections.ObjectModel; 
using System.Windows.Forms; 
class Test 
{ 
    public string Foo { get; set; } 
    public bool Bar { get; set; } 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     var data = new ReadOnlyCollection<Test>(
      new[] { 
       new Test {Foo="abc", Bar=true}, 
       new Test {Foo="def", Bar=false}, 
       new Test {Foo="ghi", Bar=true}, 
       new Test {Foo="jkl", Bar=false}, 
      }); 
     Application.Run(
      new Form { 
       Text = "ReadOnlyCollection test", 
       Controls = { 
        new DataGridView { 
         Dock = DockStyle.Fill, 
         DataSource = data, 
         ReadOnly = false 
        } 
       } 
      }); 
    } 
} 
2

你是如何綁定到您的DataGridView?有一件事是,如果您使用Linq列表作爲從數據庫查詢的數據源並且沒有完整的對象,那麼除非在select函數中指定「with new」,否則這些屬性是隻讀的。您的帖子中沒有很多信息。我希望這有幫助。

2

我昨天剛裝VS 2013,最新的版本(更新5)和錯誤仍然存​​在,導致您所描述的行爲。

總之,爲了解決這個問題,首先確保datagridview設置爲GUI可編輯的。這尤其包括控件右上方的表單設計器中的小箭頭。在箭頭下拉菜單中選擇「啓用編輯」,確保啓用。現在,表單設計師以某種主要方式編輯列(例如添加或刪除列)。就是這樣,當你運行程序時,你會發現GUI編輯現在正在工作。

要重現此錯誤,請在表單設計器內使用datagridview控件右上角的小箭頭將「啓用編輯」設置爲false。現在對列進行重大更改(例如添加或刪除列)。編譯並運行程序。現在回到微型箭頭並重新啓用「啓用編輯」複選框。再次運行該程序。在這一點上,這個錯誤會自我表現出來,並且你會發現即使你在VS中另外配置了datagridview也不是GUI可編輯的。

相關問題