Hai*_*tak 4 c# textbox datagridview winforms textchanged
我想得到一列datagridview的总和,并在文本框中显示.每次输入后,应动态更改总和.为此,我使用文本框的textChanged事件但是当输入时,它不显示任何结果.我想在文本框中动态获取结果.我想避免使用按钮来求和.
这是textbox textChanged事件的一段代码:
private void textBox9_TextChanged(object sender, EventArgs e)
{
double sum = 0;
for (int i = 0; i < dataGridView2.Rows.Count; ++i)
{
sum += Convert.ToDouble(dataGridView2.Rows[i].Cells[5].Value);
}
textBox9.Text = sum.ToString();
}
Run Code Online (Sandbox Code Playgroud)
你的代码是正确的,但我把它放在CellValueChanged事件中并检查以确保它是你正在寻找的同一个单元格.如果单元格的值发生更改,或者添加了新行并随后获取了值,则会触发此操作.
private void dataGridView2_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 5)
textBox9.Text = CellSum().ToString();
}
private double CellSum()
{
double sum = 0;
for (int i = 0; i < dataGridView2.Rows.Count; ++i)
{
double d = 0;
Double.TryParse(dataGridView2.Rows[i].Cells[5].Value.ToString(), out d);
sum += d;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
我把你的逻辑拆分成一个单独的方法,所以你想要得到其他东西的总和,你可以简单地调用那个方法.我想你可以阅读textbox.Text,但是......
我也使用了Double.TryParse,因为它提供了一些基本保护,因为给定单元格中的值实际上不是数字.我不知道数据来源是什么(用户输入/来自外部源?)所以我想我会添加一些保护.
编辑格兰特提出了一个很好的观点,编辑我的解决方案,包括修改单元格值.我使用了CellValueChanged事件而不是CellEndEdit,除了用户可以更改其值之外.