在gridview中选择下一个突出显示的行

时间:2016-03-09 18:46:12

标签: c# gridview

这是我目前的代码:

private void searchBtn_Click(object sender, EventArgs e)
{
    //get the search term from the textbox
    String searchTerm = textBox.Text;
    //if the column index is 1 the we search by code and 2 if we search by name
    int columnIndex = 0;
    if (codeRadioBtn.Checked)
        columnIndex = 1;
    else
        columnIndex = 2;

    gridView.ClearSelection();

    int firstIndex = 0;
    bool found = false;
    for (int i = 0; i < gridView.Rows.Count; i++)
    {
        //change background color to DarkOrange for the rows that contain the searched value
        if (gridView.Rows[i].Cells[columnIndex].Value.ToString().Contains(searchTerm, StringComparison.OrdinalIgnoreCase))
        {
            //gridView.Rows[i].Selected = true;
            gridView.Rows[i].DefaultCellStyle.BackColor = Color.DarkOrange;
            found = true;

            if (firstIndex < 1)
            {
                firstIndex = i;
            }
        }
    }
    //display message if no item was found
    if (!found)
        MessageBox.Show("The search term was not found", "Warning");
    else
    // scroll grid to first highlighted row
    this.gridView.Rows[firstIndex].Cells[0].Selected = true;
    this.gridView.CurrentCell = this.gridView.Rows[firstIndex].Cells[0];
    this.gridView.FirstDisplayedCell = this.gridView.CurrentCell;
}

我正在尝试制作它,第二次点击搜索按钮,它会将当前选中的当前设置为下一个突出显示的行。

我已经尝试了一段时间,但无法理解。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用ListArray存储所有匹配项。

 List<int> matchList = new List<int>();

e.g。

在突出显示行时,为什么不将该行添加到列表中。

gridView.Rows[i].DefaultCellStyle.BackColor = Color.DarkOrange;
matchList.add(i);

要弄清楚它是否是第一次点击,即加载和突出显示匹配,请在按钮外部设置一个int,点击以跟踪您点击按钮的次数。

 int clickcount= 0;

然后,在找到并突出显示将clickcount设置为1并确保不使用if语句再次突出显示,而是运行以下循环。

if (clickcount != 0 && clickcount !=matchList.Count-1)
{

     this.gridView.CurrentCell = this.gridView.Rows[clickcount].Cells[0];

 clickcount++;
}
else
{
clickcount = 0;
}

完整示例

  int clickcount = 0;
    List<int> matchList = new List<int>();

    protected void searchBtn_Click(object sender, EventArgs e)
    {
        if (clickcount == 0)
        {
            //get the search term from the textbox
            String searchTerm = textBox.Text;
            //if the column index is 1 the we search by code and 2 if we search by name
            int columnIndex = 0;
            if (codeRadioBtn.Checked)
                columnIndex = 1;
            else
                columnIndex = 2;

            gridView.ClearSelection();

            int firstIndex = 0;
            bool found = false;

            for (int i = 0; i < gridView.Rows.Count; i++)
            {
                //change background color to DarkOrange for the rows that contain the searched value
                if (gridView.Rows[i].Cells[columnIndex].Value.ToString().Contains(searchTerm, StringComparison.OrdinalIgnoreCase))
                {
                    //gridView.Rows[i].Selected = true;


                    this.gridView.CurrentCell = gridView.Rows[0].Cells[0];
                    gridView.Rows[i].DefaultCellStyle.BackColor = Color.DarkOrange;
                    matchList.Add(i);
                    found = true;

                    if (firstIndex < 1)
                    {
                        firstIndex = i;
                    }
                }
            }
            //display message if no item was found 
            if (!found)
            {
                MessageBox.Show("The search term was not found", "Warning");
            }
           //add one to the count to stop the search happing again.
            clickcount = 1;
        }
        else
        {
            //if clickcount = 1+ or your've reached the end of your match list count
              if (clickcount != 0 && clickcount != matchList.Count - 1)
            {


                //gridView.Rows[clickcount].DefaultCellStyle.BackColor = Color.Red;
                this.gridView.CurrentCell = gridView.Rows[matchList[clickcount]].Cells[0];

                clickcount++;
            }
            else
              {
                  MessageBox.Show("No More Found");
                clickcount = 0;
                matchList.Clear();
            }

        }
    }