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