2

我使用以下代码在 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 的底部,用户必须一直向下滚动到底部。我可以使用哪个代码跳转到我要查找的行?任何帮助将不胜感激!

4

2 回答 2

7

我发现我可以使用DataGridView.FirstDisplayedScrollingRowIndexProperty 滚动到选定的行索引并将其显示为 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;
}
于 2013-10-29T03:21:53.100 回答
2
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];
}

visibleColumnIndex - 所选单元格必须可见

于 2014-11-26T13:12:40.307 回答