我创建了这个计算,当单击一个按钮时会触发它,它将乘以2个datagridview列并将结果显示在第三个,然后将总共2列相加并将结果发送到2个文本框
现在我想在数据网格视图中输入一个值或编辑(其中一列是产品数量)时就会发生这种情况,因此在输入时它应该重做计算...所以我应该将此代码添加到哪个空格中?
private void btnClearPN_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
decimal a = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
decimal b = Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value);
decimal c = a * b;
dataGridView1.Rows[i].Cells[4].Value = c.ToString();
}
GrandTotal();
Qty();
}
答案 0 :(得分:1)
第一个选项 - 用户完成编辑后更新单元格值
如果要在用户完成编辑值时更新DataGridView,则应该处理DataGridView的CellEndEdit
事件(这取决于用户移动到下一个Cell或移动到窗体上的另一个控件)。有关详细信息,请参阅MSDN - DataGridView.CellEndEdit Event。
当编辑模式停止当前选定的单元格时发生。
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs dataGridViewCellEventArgs)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
decimal a = Convert.ToDecimal(dataGridView1.Rows[i].Cells[2].Value);
decimal b = Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value);
decimal c = a * b;
dataGridView1.Rows[i].Cells[4].Value = c.ToString();
}
GrandTotal();
Qty();
}
第二个选项 - 在用户输入时更新单元格值
使用此方法需要更多参与,并且需要正确处理EditControlShowing
事件,并且TextBox
它是TextChanged
事件。
如果要在用户键入时更新DataGridView,则应该处理DataGridView的EditControlShowing
事件。此事件将允许您访问编辑控件。对于简单的DataGridView设置,这是一个TextBox。虽然这可以很容易地成为ComboBox,CheckBox或任何其他控件。
有关详细信息,请参阅MSDN - DataGridView.EditingControlShowing Event。
在显示用于编辑单元格的控件时发生..
private DataGridViewRow CurrentRow;
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs dataGridViewEditingControlShowingEventArgs)
{
CurrentRow = dataGridView1.CurrentRow;
TextBox textBox = dataGridViewEditingControlShowingEventArgs.Control as TextBox;
if (textBox != null)
{
textBox.TextChanged -= textBox_TextChanged;
textBox.TextChanged += textBox_TextChanged;
}
}
private void textBox_TextChanged(object sender, EventArgs eventArgs)
{
TextBox textBox = (TextBox)sender;
decimal a = Convert.ToDecimal(CurrentRow.Cells[2].Value);
decimal b = Convert.ToDecimal(CurrentRow.Cells[3].Value);
decimal c = a * b;
CurrentRow.Cells[4].Value = c.ToString();
}
注意:必须包含以下行:
textBox.TextChanged -= textBox_TextChanged;
由于处理程序是在运行时添加的,因此每次显示编辑控件时,都必须删除任何以前添加的处理程序,否则将多次调用它。