更改DataGridView的可编辑列的行为

时间:2011-10-14 09:42:21

标签: c# .net winforms datagridview

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

示例:

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

1 个答案:

答案 0 :(得分: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;
    }

希望它有所帮助。