所以我有一个DataGridView填充了数据,主键是ex。"订单号"。每当向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。
答案 0 :(得分:0)
到达那里的一种方法:
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
答案 1 :(得分:0)
我不得不采取的方法是从填充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)
绝对不是最好的修复方法,因为我在重点关注一行之前重置排序,但它会让用户暂时停止。