【问题标题】:Change behaviour of editable column of DataGridView更改 DataGridView 的可编辑列的行为
【发布时间】:2023-03-17 19:01:02
【问题描述】:

我有一个 DataGridView,其中有一列。此列不是只读的,它的目的是能够在每个单元格中写入文本。当我选择一个空单元格并开始输入时,它按预期工作。但是,当单元格中已经有文本并且我开始输入时,所有现有文本都会被删除。我怎样才能防止这种情况发生?

例子:

单元格已包含“ABC”。当我输入 D 时,我希望单元格包含“ABCD”,但它只包含“D”。

【问题讨论】:

  • 我猜你必须使用 (.Text += "test") 而不是 (.Text = "test").. 给我们看一些代码 plz..
  • @Rob:没有可显示的代码。这是默认行为。
  • 当用于编辑单元格内容的文本框显示并在文本框末尾有插入符号时,OP 不想选择现有文本

标签: c# .net winforms datagridview


【解决方案1】:

假设 dg 作为您的数据网格视图。尝试将以下事件处理程序 EditingControlShowing、CellEnter、CellLeave 分配给您的 datagridview。你现在应该感觉很好。

    string str = string.Empty;
    int i = 0;

    private void dg_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        str = dgv[e.ColumnIndex, e.RowIndex].Value.ToString();
    }

    void dg_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox tb = (TextBox)e.Control;
        tb.TextChanged += new EventHandler(tb_TextChanged);
    }

    void tb_TextChanged(object sender, EventArgs e)
    {
        if (i == 0)
        {
            i++;
            DataGridViewTextBoxEditingControl dgv = (DataGridViewTextBoxEditingControl)sender;
            string curVal = dgv.Text;
            dgv.Text = str + curVal;
            dgv.SelectionStart = dgv.Text.Length;
        }
        dg.EditingControlShowing -= new DataGridViewEditingControlShowingEventHandler(dg_EditingControlShowing);
        dg.CellEnter -= new DataGridViewCellEventHandler(dg_CellEnter);
    }

    private void dg_CellLeave(object sender, DataGridViewCellEventArgs e)
    {
        i = 0;
    }

希望对你有帮助。

【讨论】:

  • 我还没有时间尝试这个,但我会告诉你它是否有效:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多