如何检查行是否包含“;0”;或在进行计算之前在DataGridView中为空,并删除此行

本文关键字:DataGridView 计算 删除 检查 何检查 是否 包含 | 更新日期: 2023-09-27 18:13:09

伙计们!我需要一些代码方面的帮助。

所以,故事是,我有一个任务做一个表单应用程序,用户可以计算离散随机变量的熵。他键入事件和概率,然后程序计算熵。

所以我使用了DataGridView,一个按钮和一个TextBox。我做了所有的事情,包括限制,比如"所有概率的总和必须等于1"。

但我不能做的是——程序本身必须删除或忽略包含"0"的行或空的行(因为熵公式包含数字的对数,而0的对数是无穷大,这就是为什么程序会输出"NaN——而不是数字"(。主代码位于"按钮"中。

以下是它的一个片段:

for (int z = dataGridView1.Rows.Count - 1; z >= 0; z--)
                    {
                        if (dataGridView1[1, z].Value == null)
                        {
                            dataGridView1.Rows.Remove(dataGridView1.Rows[z]);
                        }
                        else if (dataGridView1[1, z].Value == "0")
                        { dataGridView1.Rows.Remove(dataGridView1.Rows[z]);}
                    }

在这个代码之后,我唯一得到的是一个错误,它不能删除一个新的"传输"(不知道如何将其翻译成英语(行。

这是整个代码,位于"按钮"中:

int counter = 1;
            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                dataGridView1[0, i].Value = counter++;
            }
            double X = 0;
            double A = 1;
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                X += Convert.ToDouble(dataGridView1[1, i].Value);
            }
            if (X < A && X > A)
            {
                MessageBox.Show("Cумма вероятностей меньше или больше 1, введите другие значения вероятностей", "АШИППКА", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                double H = 0;
                for (int i = 0; i < dataGridView1.RowCount - 1; i++)
                {
                    for (int z = dataGridView1.Rows.Count - 1; z >= 0; z--)
                    {
                        if (dataGridView1[1, z].Value == null)
                        {
                            dataGridView1.Rows.Remove(dataGridView1.Rows[z]);
                        }
                        else if (dataGridView1[1, z].Value == "0")
                        { dataGridView1.Rows.Remove(dataGridView1.Rows[z]);}
                    }
                    double p = Convert.ToDouble(dataGridView1[1, i].Value);
                    H += p * Math.Log(p, 2.0);
                }
                textBox1.Text = Convert.ToString(-H);
            }

很抱歉我的英语不好,这不是我的母语,这就是为什么有很多错误的原因。如果你不明白什么,请问。

请帮帮我。

如何检查行是否包含“;0”;或在进行计算之前在DataGridView中为空,并删除此行

详述上面的评论。

如果您的DataGridView使用DataTableBindingSource,例如

DataTable table = new DataTable();
table.Columns.Add(...);
DataGridView dgv = new DataGridView();
dgv.DataSource = table;

在循环引用dataGridView1的任何位置,请将其替换为table

例如

for (int i = 0; i < table.Rows.Count; i++) {
  //...
}