我期待这个设置会影响控件本身,但我似乎无法通过将AllowUserToAddRows设置为true的DataGridView添加新行。我只是垃圾使用我的鼠标和键盘,还是我完全误解了这个属性?我怀疑它是后者,虽然我在文档的方式上找不到太多指向正确的方向。
编辑:顺便说一下,这不是我的垃圾,它似乎与使用List作为DataGridView的DataSource有关;如果我绑定到List,那么小'*'就不会出现。答案 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;
编辑:
答案 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