繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM