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