我试图让DataGridView将“插入新行”行渲染为网格中的第一行而不是最后一行。我该如何做到这一点,甚至可能在控制中?
答案 0 :(得分:7)
我认为没有办法将“新行”行移动到数据网格的顶部。
但是,如果您将顶行留空并且填充的数据将该行向下移动,该怎么办?换句话说,创建自己的“新行”行,它只是网格中的第一行,并在编辑结束时在上面添加新的空行。
Dim myrow = existingDataTable.NewRow
existingDataTable.Rows.Add(myrow)
adp.Fill(existingDataTable)
With DataGridView1
.DataSource =existingDataTable
End With
答案 1 :(得分:4)
如果您没有使用绑定控件,dgvItems.Rows.Insert()将允许您指定插入行的位置。
如果您使用的是绑定数据网格视图,而没有排序处于活动状态,请将新行添加到所需位置的数据源中:
BoundTable.Rows.InsertAt(BoundTable.Rows.NewRow(),RowLocation);
我发现了一个有趣的关系,如果当前行上有编辑并且该行尚未提交给数据源(即您刚刚开始输入数据),则似乎有必要将活动单元格移动到另一个在插入行之前提交更改的行。
答案 2 :(得分:1)
您是否可以为新行的键分配一个小于所有现有行的临时值?然后按该键对DataView进行排序,并将视图绑定到网格。
我的团队使用负数作为行ID,直到该行已插入数据库。我不记得我们的新行显示在顶部但我们也没有将其作为要求。
答案 3 :(得分:1)
如果所有其他方法都失败了,那么hacky方法就是将一行单独的DataGridView放在现有的一行上,克隆其列,然后连接行提交事件以将数据添加到下一行:)
答案 4 :(得分:1)
您是否正在使用RowDataBound事件?如果是这样,您可以检查是否绑定列标题行,然后添加适当的代码以在其下方插入一行。
这样,当您的内容行被绑定时,不会涉及项目索引的任何混淆,但我建议使用一些DataKeys或以防万一。此外,使用RowDatabound事件将允许您在用户页面到GridView中的不同行块时使用“插入行”。
答案 5 :(得分:1)
正如While-E所说,使用Insert
代替Add
。这样,您可以指定要添加新记录的位置。要在网格顶部添加新记录,只需使用Insert(0)
。
DataGridView1.Rows.Insert(0)
这将在顶部添加新记录,始终
DataGridView1.Rows(0).Cells(n).Value = "abc"
这会将值设置为n列
答案 6 :(得分:-2)
我假设您的意思是,当您想要添加新行时,您希望实际将行插入表格的顶部而不是默认情况下的表格底部?如果是这样,你不必处理排序或键值;只需使用Insert方法执行此操作:
'创建新行
Dim tmpRow = New DataGridViewRow
'以某种方式调整行
tmpRow.Height = _cellRectSize
'将行添加到顶部的DataGridView(即dgvEditor)(index = 0)
Me.dgvEditor.Rows.Insert(0,tmpRow)
对我来说就像一个魅力,希望它可以帮助别人!