改变DataGridView可编辑列的行为

3
我有一个DataGridView,其中有一列。这一列不是只读的,目的是能够在每个单元格中写入文本。当我选择一个空单元格并开始输入时,它按预期工作。然而,当一个单元格中已经有文本,并且我开始输入时,所有现有的文本都被删除了。如何防止这种情况发生?
示例:
单元格已经包含“ABC”。当我键入D时,我希望单元格包含“ABCD”,但它只包含“D”。

1
你需要使用 (.Text += "test") 而不是 (.Text = "test"),我猜.. 请展示一些代码。 - Rob
@Rob:没有代码可展示。这是默认行为。 - Bridget Midget
听起来像是 OP 希望在单元格内容的文本框显示时不选择现有文本,并将插入符号放置在文本框的末尾。 - JonAlb
1个回答

3

假设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;
    }

希望这能有所帮助。

我还没来得及尝试这个,但如果它有效的话,我会让你知道的 :) - Bridget Midget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接