【问题标题】:How to allow editing of a datagridview programmatically?如何允许以编程方式编辑 datagridview?
【发布时间】:2012-03-02 13:55:47
【问题描述】:

我有一个连接到数据库的 datagridview。我有一个复选框,用于启用要在 datagridview 中编辑的数据。如果选中该复选框,则只能编辑 1 列 datagridview,编辑后单击保存按钮将其反映在数据库中,如果未选中复选框,则禁用编辑。

我尝试过这样的事情:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        if (checkBox1.CheckState == CheckState.Checked)
        {
            dataGridView1.CurrentRow.ReadOnly = false;
            dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
        }
        else if (checkBox1.CheckState == CheckState.Unchecked)
        {
            dataGridView1.ReadOnly = true;
        }
    }

此代码忽略了选择要编辑的列的概念。

【问题讨论】:

  • 好的。您的复选框控制数据是否可以编辑,对吗?但是您还希望人们选择要编辑的列?他们应该如何在 UI 中做到这一点?

标签: c# datagridview


【解决方案1】:
    for (int i = 0; i <= dataGridView1.ColumnCount - 1; i++)
    {
        dataGridView1.Columns[i].ReadOnly = true; 
    }

【讨论】:

    【解决方案2】:

    只有当您的 datagridview 自己的 readonly 属性设置为 false 时,本节提供的帮助才有效。如果它不是每列的只读属性,则将持续存在。当您使用智能标签选择并启用“使网格可编辑”时,只读属性设置为 false。新一代网格的好处是您不必像在

    中那样查找列
    foreach (var col in grid1.columns)
    

    您可以只使用所选列的名称或默认的“column1.ReadOnly = false”。枚举器当然有它自己的优势。

    【讨论】:

      【解决方案3】:

      要做你想做的事,你必须只设置一个你想禁用的列。

      dataGridView1.Columns[0].ReadOnly = true;            
      dataGridView1.Columns[1].ReadOnly = false;
      

      但是,你想这样做吗?屏蔽一整列?

      【讨论】:

        【解决方案4】:

        你可以试试

        if(dataGridView1.SelectedCells.Count>0) dataGridView1.SelectedCells[0].ReadOnly=false; 
        

        而不是

        dataGridView1.CurrentRow.ReadOnly=false;
        

        【讨论】:

          猜你喜欢
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          相关资源
          最近更新 更多