如何动态获取文本框中datagridview列的总和

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)

sab*_*669 9

你的代码是正确的,但我把它放在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,除了用户可以更改其值之外.