[英]Target Highest Primary Key When Adding New Row to DataGridView
因此,我有一个DataGridView,其中的数据填充有主键为ex。“ Order Number”。 每当将新行添加到DGV时,我都会添加此行代码来定位新行。
dgv.Rows(dgv.Rows.Count - 1).Selected = True
这一切都很好,但是只要在列标题上对用户进行排序,它就会按照预期的方式转到最后一行,但这不是新行所在的位置。
那么我有可能这样做,但是要针对最高的主键号吗? 由于要添加的最新行将在创建时包含最高的主键号。
谢谢。
更新:我已经找到一种方法,可以通过以下方法获得此类主键的最高价值:
Dim MaxID = dgv.Rows.Cast(Of DataGridViewRow)().Max(Function(r) Convert.ToInt32(r.Cells("Order Number").Value))
但是每当我使用时:
dgv.Rows(MaxID).Selected = True
我收到一个错误消息,说该值超出了数组的范围。 我尝试了MaxID-1。
一种到达那里的方法:
Dim qry = (From r As DataGridViewRow In Me.dgv1.Rows
Order By r.Cells("Order Number").Value Descending
Select r.Index)
If qry.Any Then
Dim idx As Integer = qry.First
Me.dgv1.Rows(idx).Selected = True
End If
或者您可以直接选择该行
Dim targetRow = Me.dgv1.Rows.Cast(Of DataGridViewRow)().
OrderByDescending(Function(r) r.Cells("Order Number").Value).FirstOrDefault
If targetRow IsNot Nothing Then targetRow.Selected = True
我必须采取的方法是通过从填充DataGridView的DataSet中重置排序,然后选择行和currentcell。
DataSet.Tables("TableName").DefaultView.Sort = ""
dgv.Rows(dgv.Rows.Count - 1).Selected = True
dgv.CurrentCell = dgv.Rows(dgv.Rows.Count - 1).Cells(dgv.FirstDisplayedCell.ColumnIndex)
绝对不是最好的解决方法,因为我将注意力集中在行之前要重新设置排序,但是暂时会保留用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.