【问题标题】:DataGridView - Focus a specific cellDataGridView - 聚焦特定单元格
【发布时间】:2011-06-22 13:53:38
【问题描述】:

如何在 DataGridView 中的任何指定单元格上设置焦点?我期待一个像 Focus(rowindex,columnindex) 这样简单的方法,但这并不容易。

【问题讨论】:

标签: c# datagridview


【解决方案1】:

将当前单元格设置为:

DataGridView1.CurrentCell = DataGridView1.Rows[rowindex].Cells[columnindex]

或

DataGridView1.CurrentCell = DataGridView1.Item("ColumnName", 5)

您可以通过以下方式直接使用 Editing 进行对焦:

dataGridView1.BeginEdit(true)

【讨论】:

  • .CurrentCell 有效,但 DataGridView1.Item(1, 5) 无效。我必须这样做:dataGridView1.CurrentCell = dataGridView1.Rows[rowindex].Cells[columnindex].
  • @SamikR DataGridView1[colIndex, rowIndex]
  • 请注意 BeginEdit 在构造函数中不起作用。如果您想在表单启动时选择某些内容,您应该从 MainForm_Shown 等操作函数之一执行此操作。
【解决方案2】:

您可以通过将 Selected 属性设置为 true 来将 Focus 设置为特定的 Cell

dataGridView1.Rows[rowindex].Cells[columnindex].Selected = true;

为了避免多重选择,只需设置

dataGridView1.MultiSelect = false;

【讨论】:

    【解决方案3】:

    datagridview 的问题是它会自动选择第一行,所以你想 清除选择

    grvPackingList.ClearSelection();
    dataGridView1.Rows[rowindex].Cells[columnindex].Selected = true;  
    

    否则将无法正常工作

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题。我隐藏了一些列,然后我尝试选择第一行。这并没有真正起作用:

      datagridview1.Rows[0].Selected = true;
      

      所以我尝试选择cell[0,0],但也没有成功,因为这个单元格没有显示出来。现在我的最终解决方案运行良好:

      datagridview1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;    
      datagridview1.CurrentCell = datagridview1.FirstDisplayedCell;
      

      所以这会选择完整的第一行。

      【讨论】:

        【解决方案5】:
        public void M(){ 
          dataGridView1.CurrentCell = dataGridView1.Rows[0].Cells[0];
          dataGridView1.CurrentCell.Selected = true; 
          dataGridView1.BeginEdit(true);
        }
        

        【讨论】:

          【解决方案6】:

          只需简单的粘贴并将 Gridcolor() 传递到任何你想要的地方。

          Private Sub Gridcolor()
              With Me.GridListAll
                  .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                  .MultiSelect = False
                  '.DefaultCellStyle.SelectionBackColor = Color.MediumOrchid
              End With
          End Sub
          

          【讨论】:

          • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
          【解决方案7】:

          在 event form_load (object sender, EventArgs e) 中试试这个

          dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count1].Cells[0];

          此代码将重点放在最后一行和第一个单元格上

          【讨论】:

            【解决方案8】:
                        //For me it's the best way to look for the value of a spezific column
                        int seekValue = 5;
                        foreach (DataGridViewRow row in dataGridView1.Rows)
                        {
                            var columnValue = Convert.ToInt32(row.Cells["ColumnName"].Value);
                            if (columnValue == seekValue)
                            {
                                dataGridView1.CurrentCell = row.Cells[0];
                            }
                        }
            

            【讨论】:

              【解决方案9】:
               private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
                  {
                      int row = e.RowIndex;
                      int col = e.ColumnIndex;
                      if (row < 0 || col != 3)
                          return;
                      if (e.FormattedValue.ToString().Equals(String.Empty))
                      {
                      }
              
                      else
                      {
                          double quantity = 0;
                          try
                          {
                              quantity = Convert.ToDouble(e.FormattedValue.ToString());
                              if (quantity == 0)
                              {
                                  MessageBox.Show("The quantity can not be Zero", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                  e.Cancel = true;
                                  return;
                              }
                          }
                          catch
                          {
                              MessageBox.Show("The quantity should be decimal value.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                              e.Cancel = true;
                              return;
                          }
                      }
                  }
              

              【讨论】:

              • 这不是所提出问题的有效解决方案。
              【解决方案10】:

              你可以试试这个 DataGrid:

              DataGridCellInfo cellInfo = new DataGridCellInfo(myDataGrid.Items[colRow], myDataGrid.Columns[colNum]);
              DataGridCell cellToFocus = (DataGridCell)cellInfo.Column.GetCellContent(cellInfo.Item).Parent;
              ViewControlHelper.SetFocus(cellToFocus, e);
              

              【讨论】:

              • 欢迎来到 StackOverflow。请提供一些解释,为什么您认为您提出的解决方案可能对 OP 有所帮助。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-24
              相关资源
              最近更新 更多