向DataGridView添加新行时目标最高主键

时间:2016-07-01 14:40:39

标签: vb.net

所以我有一个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。

2 个答案:

答案 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)

绝对不是最好的修复方法,因为我在重点关注一行之前重置排序,但它会让用户暂时停止。