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