DataGridView-如何跳转到搜索中的选定行?

时间:2013-10-29 02:59:35

标签: c# winforms search gridview datagridview

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

2 个答案:

答案 0 :(得分:4)

我发现我可以使用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;
}

答案 1 :(得分:1)

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 - 所选单元格必须可见