DataGridView – AllowUserToAddRows做了什么?

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

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

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

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

试试吧,

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

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

将列表包装在BindingSource是解决方案的一个重要部分(另外还有一个问题: 无法允许用户使用List <> Datasource将行添加到DataGridView )。

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

我从一个exception中得到了一个线索,当我尝试了merlin的回答时,它引发了一个exception,其中的消息表明也可以通过处理AddingNew事件来启用行添加:

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

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

我有同样的问题。

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

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