Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改DataGridView的可编辑列的行为_C#_.net_Winforms_Datagridview - Fatal编程技术网

C# 更改DataGridView的可编辑列的行为

C# 更改DataGridView的可编辑列的行为,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我有一个DataGridView,其中有一列。此列不是只读的,其目的是能够在每个单元格中写入文本。当我选择一个空单元格并开始键入时,它会按预期工作。但是,当单元格中已经有文本,并且我开始键入时,所有现有文本都将被删除。我怎样才能防止这种情况 例如: 单元格已包含“ABC”。键入D时,我希望单元格包含“ABCD”,但它只包含“D”。假设dg是您的datagridview。尝试将以下事件处理程序EditingControlShowing、CellEnter、CellLeave分配给datagridv

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

例如:


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

假设dg是您的datagridview。尝试将以下事件处理程序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;
    }

希望有帮助。

我想你必须使用(.Text+=“test”)而不是(.Text=“test”)。。请给我们看一些代码。@Rob:没有代码可以显示。这是默认行为。听起来OP不想在编辑单元格内容的文本框显示并在文本框末尾插入符号时选择现有文本。我还没有时间尝试此操作,但我会让您知道它是否有效:)