DataGridView - AllowUserToAddRows做了什么?

时间:2009-09-14 14:43:16

标签: c# datagridview

我期待这个设置会影响控件本身,但我似乎无法通过将AllowUserToAddRows设置为true的DataGridView添加新行。我只是垃圾使用我的鼠标和键盘,还是我完全误解了这个属性?我怀疑它是后者,虽然我在文档的方式上找不到太多指向正确的方向。

编辑:顺便说一下,这不是我的垃圾,它似乎与使用List作为DataGridView的DataSource有关;如果我绑定到List,那么小'*'就不会出现。

4 个答案:

答案 0 :(得分:5)

我通过将STMTTRN从List更改为BindingList来解决这个问题 - 当用作DataSource时,List似乎有一些非常奇怪的行为(请参阅我最近的另一个问题,它以相同的方式解决)。

它是在生成的代码中,但我已经将它从一个数组更改为一个List,所以BindingList几乎没有任何额外的麻烦:)

答案 1 :(得分:2)

试试吧,

DataTable dt = new DataTable();
dt.Columns.Add("No", typeof(int));
dt.Columns.Add("Name");
dataGridView1.AllowUserToAddRows = true;
dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystroke;
dataGridView1.DataSource = dt;

编辑:

查看IBindingList

答案 2 :(得分:2)

对我来说同样的问题,BindingList并没有解决它,但是梅林的答案给了我一个最终解决方案的暗示。

将列表包含在BindingSource中是解决方案的重要部分(另请参阅另一个问题:Can't Allow User To Add Rows to DataGridView with List<> Datasource)。

对我而言,缺少的一步是我的列表中的对象类没有公共无参数构造函数。添加无参数构造函数使AllowUserToAddRows按预期运行。

我从我尝试使用merlin的答案时提出的异常中获得了线索,其中的消息表明也可以通过处理AddingNew事件来启用行添加:

  

无法在“MyType”类型上调用AddNew。这种类型没有   公共默认构造函数。您可以在“MyType”类型上调用AddNew   如果你处理AddingNew事件并创建适当的对象。

我没有尝试这个,幸运的是,添加一个公共无参数构造函数对我来说没问题,但对于那些无法添加无参数构造函数的人来说,这是一个希望的信息。

答案 3 :(得分:1)

我遇到了同样的问题。

使用BindingSource作为DGV数据源并设置BindingSource属性AllowNew = True,解决了我的问题。

Dim binding As New BindingSource
binding.DataSource = myList
binding.AllowNew = True
With DataGridView1
    .AutoGenerateColumns = False
    .DataSource = binding
End With