数据网格视图 - 如何跳转到搜索中的选定行

本文关键字:搜索 何跳转 网格 数据网 视图 数据 | 更新日期: 2023-09-27 18:37:25

我使用以下代码在 DataGridView 中查找一行并突出显示该行。

private void btnSearch_Click(object sender, EventArgs e)
    {
        currentMode = ModeSelection.Search;
        if (cmbSearchBy.SelectedIndex == Convert.ToInt16(SearchBy.MaterialID))
        {
            dgvSearchResults.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            int rowIndex = -1;
            try
            {
                foreach (DataGridViewRow row in dgvSearchResults.Rows)
                {
                    if (row.Cells[1].Value.ToString().Equals(materialLocation.MaterialID))
                    {
                        //Select the row here
                        rowIndex = row.Index;
                        dgvSearchResults.Rows[rowIndex].Selected = true;
                        break;
                    }
                }
            }
            catch (Exception ex) { throw ex; }
        }

它工作得很好。问题是我的 DataGridView 有超过 500 条记录,如果所选行靠近 DataGridView 的底部,用户必须一直向下滚动到底部。我可以使用哪个代码跳转到我要查找的行?任何帮助将不胜感激!

数据网格视图 - 如何跳转到搜索中的选定行

我发现我可以使用DataGridView.FirstDisplayedScrollingRowIndex属性滚动到选定的行索引,并将其显示为 DataGridView 中的第一行。

这就是我在程序中的使用方式-

if (row.Cells[1].Value.ToString().Equals(materialLocation.MaterialID))
{
    rowIndex = row.Index;
    dgvSearchResults.ClearSelection();                            
    dgvSearchResults.Rows[rowIndex].Selected = true;
    dgvSearchResults.FirstDisplayedScrollingRowIndex = rowIndex;
    dgvSearchResults.Focus();
    break;
}
int rowIndex = -1;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.Cells[0].Value.ToString().Equals(searchString))
    {
        rowIndex = row.Index;
        break;
    }
}
if (rowIndex >= 0)
{
    dataGridView1.CurrentCell = dataGridView1[visibleColumnIndex, rowIndex];
}

可见列索引 - 所选单元格必须可见