2013-04-15 83 views
0

我有一個datagridview其中有三列。實際上,這是一個數據處理應用程序,這就是爲什麼我想要使用鍵盤(最少使用鼠標) 代碼如下 [代碼languge =「CSHARP」]設置焦點DataGridViewCombobox,同時按箭頭鍵上下

private void Form2_Load(object sender, EventArgs e) 
     { 
      DataTable odt = new DataTable(); 
      DataColumn odc = new DataColumn(); 
      DataColumn odcSec = new DataColumn(); 
      DataColumn odcThird = new DataColumn(); 
      DataColumn odcForth = new DataColumn(); 
      odc.ColumnName = "Class"; 
      odt.Columns.Add(odc); 
      odcSec.ColumnName = "Subject Name"; 
      odt.Columns.Add(odcSec); 
      odcThird.ColumnName = "Grade"; 
      odt.Columns.Add(odcThird); 
      odcForth.ColumnName = "GradeCollection"; 
      odt.Columns.Add(odcForth); 
      DataRow odr = odt.NewRow(); 
      odr["Class"] = "FYBA"; 
      odr["Subject Name"] = "Hindi"; 
      odr["Grade"] = "A"; 
      odr["GradeCollection"] = "A,B,C,D,E"; 
      odt.Rows.Add(odr); 
      DataRow odrFirst = odt.NewRow(); 
      odrFirst["Class"] = "SYBA"; 
      odrFirst["Subject Name"] = "English"; 
      odrFirst["Grade"] = "B"; 
      odrFirst["GradeCollection"] = "A,B,C,D,E"; 
      odt.Rows.Add(odrFirst); 
      DataRow odrSecond = odt.NewRow(); 
      odrSecond["Class"] = "SYBA"; 
      odrSecond["Subject Name"] = "English"; 
      odrSecond["Grade"] = "C"; 
      odrSecond["GradeCollection"] = "A,B,C,D,E"; 
      odt.Rows.Add(odrSecond); 
      DataRow odrThird = odt.NewRow(); 
      odrThird["Class"] = "TYBA"; 
      odrThird["Subject Name"] = "Marathi"; 
      odrThird["Grade"] = "D"; 
      odrThird["GradeCollection"] = "A,B,C,D,E"; 
      odt.Rows.Add(odrThird); 
      DataRow odrForth = odt.NewRow(); 
      odrForth["Class"] = "FYBA"; 
      odrForth["Subject Name"] = "Telagu"; 
      odrForth["Grade"] = "E"; 
      odrForth["GradeCollection"] = "A,B,C,D,E"; 
      odt.Rows.Add(odrForth); 
      if (odt != null && odt.Rows.Count > 0) 
      { 
      DataGridViewTextBoxColumn txtClass = new DataGridViewTextBoxColumn(); 
      txtClass.HeaderText = "Class"; 
      txtClass.MaxInputLength = 20; 
      txtClass.Width = 70; 
      txtClass.Name = "Class"; 
      kryptonDataGridView1.Columns.Add(txtClass); 

      DataGridViewTextBoxColumn txtSubjectName = new DataGridViewTextBoxColumn(); 
      txtSubjectName.HeaderText = "SubjectName"; 
      txtSubjectName.MaxInputLength = 20; 
      txtSubjectName.Width = 70; 
      txtSubjectName.Name = "SubjectName";   
      kryptonDataGridView1.Columns.Add(txtSubjectName); 

      DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn(); 
      comboboxColumn.HeaderText = "Grade"; 
      comboboxColumn.DropDownWidth = 160; 
      comboboxColumn.Width = 90; 
      comboboxColumn.MaxDropDownItems = 3; 
      comboboxColumn.FlatStyle = FlatStyle.Flat;    
      kryptonDataGridView1.TabStop = true; 
      kryptonDataGridView1.Focus(); 
      kryptonDataGridView1.Columns.Insert(2, comboboxColumn); 
      for (int i = 0; i < odt.Rows.Count; ++i) 
      { 
       string[] row1 = new string[] { odt.Rows[i]["Class"].ToString(), odt.Rows[i]["Subject Name"].ToString() }; 
       kryptonDataGridView1.Rows.Add(row1); 
       string sItemNames = odt.Rows[i]["GradeCollection"].ToString();     
       char[] charArray = new char[] { ',' }; 
       string[] sItemNameArray = sItemNames.Split(charArray, StringSplitOptions.RemoveEmptyEntries);     
       DataTable dt = new DataTable(); 
       DataColumn dc1 = new DataColumn("Name");    
       dt.Columns.Add(dc1);    
       DataRow odrinner = dt.NewRow(); 
       odrinner["Name"] = "--Select--"; 
       dt.Rows.Add(odrinner); 
       foreach (string item in sItemNameArray) 
       { 
        dt.Rows.Add(item); 
       } 
       comboboxColumn.DataSource = dt; 
       comboboxColumn.DisplayMember = "Name";      
       if (!string.IsNullOrEmpty(odt.Rows[i]["Grade"].ToString())) 
       { 
        kryptonDataGridView1.Rows[i].Cells[2].Value = odt.Rows[i]["Grade"].ToString(); 
       } 
       else 
       { 
        comboboxColumn.DefaultCellStyle.NullValue = "--Select--"; 
       } 
      } 
     }      
    } 

[/代碼]

現在我想使用箭頭鍵以及爲組合框中選擇回車鍵,但是當我按下箭頭鍵,然後重點去下一行combobox列,它沒有選擇那個特定的組合框。同樣當我使用回車鍵然後t他的焦點轉到下一列。我想要當我按下Enter鍵或箭頭鍵時,選擇組合框(意味着焦點在組合框上),這樣我就可以在沒有空間擊中的情況下從該組合框中選擇項目。

回答

0

您可以使用此代碼:

private void kryptonDataGridView1_CellEnter(object sender, 
               DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 2) 
     { 
      kryptonDataGridView1.BeginEdit(true); 
     } 
    } 
相關問題