2014-12-05 82 views
-1

我有一个datagridview我已经实现了一个搜索功能。通过在datagridview处于焦点时输入字符,将选择包含字符的网格的第一行。C#Datagridview选定行

我用:

dtgView[index].Selected = true; 
dtgView.FirstDisplayedScrollingRowIndex = index; 

行被选中,但是当我按下向上或向下箭头,或从选定的行上下导航,在DataGridView从行索引0在DataGrid开始,而不是新选择的行?

这里是OP's原始代码/法

private void dtgView_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyValue >= 65 && e.KeyValue <= 90) 
    { 
     searchStrings += e.KeyCode; 
     for (int i = 0; i < dtgView.RowCount; i++) 
     { 
      if (dtgView.Rows[i].Cells[0].Value.ToString(). 
       Substring(0, searchStrings.Length) == searchStrings) 
      { 
       dtgView.ClearSelection(); 
       dtgView.FirstDisplayedScrollingRowIndex = i; 
       dtgView.Rows[i].Selected = true; 
       dtgView.Rows[i].Cells[0].Selected = true; 
       break; 
      } 
     } 
    } 

} 
+0

'Duta'或许可以显示完整的方法块(s)表示,关于以确保你没有任何其他事件,将基于按键按下触发.. 2行代码真的没有任何人在这里任何正义... – MethodMan 2014-12-05 21:04:17

+0

什么'键是你想使用我认为你应该检查有更好的方法来做到这一点 – MethodMan 2014-12-05 21:13:19

+0

也许这样,但这并不解决我选择的行的问题。 – duta 2014-12-05 21:14:56

回答

0

这是对我的DTG事件KEY_UP:

private void dtgView_KeyUp(object sender, KeyEventArgs e) 
     { 
      if (e.KeyValue >= 65 && e.KeyValue <= 90) 
      { 
       searchStrings += e.KeyCode; 
       for (int i = 0; i < dtgView.RowCount; i++) 
       { 
        if (dtgView.Rows[i].Cells[0].Value.ToString(). 
         Substring(0, searchStrings.Length) == searchStrings) 
        { 

         dtgView.ClearSelection(); 
         dtgView.FirstDisplayedScrollingRowIndex = i; 
         dtgView.Rows[i].Selected = true; 
         dtgView.Rows[i].Cells[0].Selected = true; 

         break; 
        } 
       } 
      } 

     } 
+0

这需要在你的原始文章'Duta'不作为答案。 – MethodMan 2014-12-05 21:08:20

+0

Im sorry对不起,这是我的第一篇文章堆栈溢出。 – duta 2014-12-05 21:09:38