Datagridview单元格值不相等,但应为c#

问题描述

我有一个数据绑定的datagridview表,用户可以在其中在每一行中键入一组值。每次用户更改/单击新单元格时,都会调用一个关联的CellContentClick事件。在这种情况下,它首先检查该行是否已满,然后传递一条if语句,检查是否有两个感兴趣的单元格的值相等。

用户单击一个新的单元格时,仅当两个单元格相等或不相等时,才运行两个单元格不相等的情况。我尝试用另一种方式来切换它,以说它是否相等==运行if语句,但它不会通过该语句。我还尝试了if / else if语句来强制2种情况,但是仍然没有通过它们相等的情况。当它在消息框中显示值在理论上应该相等时,为什么不通过“等于” /“其他”语句?

这是代码

''''private void dataGridView1_CellContentClick_1(对象发送者,DataGridViewCellEventArgs e) { //MessageBox.Show(“点击的单元格内容”); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MessageBox.Show(“单元格已更改”); int empty_row = 0;

        if (dataGridView1.RowCount != 0)
        { // If there is more than 1 row,check respective columns

            for (int i = 0; i < Convert.ToInt32(number_of_sections.Text); i++)
            {
                // Check that the row is not empty
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                for (int j = 0; j <= dataGridView1.Columns.Count - 1; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value == null || dataGridView1.Rows[i].Cells[j].Value == dbnull.Value || String.IsNullOrWhiteSpace(dataGridView1.Rows[i].Cells[j].Value.ToString()))
                    {
                        empty_row = 1; // 1 when there is an empty cell
                    }
                    else
                    {
                        // if the cell has a value in it,do nothing
                    }

                    //MessageBox.Show("this is the cell " + "'" + dataGridView1.Rows[0].Cells[i].Value + "'");
                }
                if (empty_row == 0)
                {
                    // if the cell has a value in it,compare the diameters to determine profile
                    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    if (dataGridView1.Rows[i].Cells[3].Value != dataGridView1.Rows[i].Cells[4].Value)
                    {
                        dataGridView1.Rows[i].Cells[2].Value = "linear";
                        MessageBox.Show("Passed through linear if,the value is " + dataGridView1.Rows[i].Cells[3].Value + " and " + dataGridView1.Rows[i].Cells[4].Value);
                    }
                    else 
                    {
                        dataGridView1.Rows[i].Cells[2].Value = "flat";
                    }

                    // if the cell has a value in it,compare the speeds to determine profile
                    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    if (dataGridView1.Rows[i].Cells[6].Value != dataGridView1.Rows[i].Cells[7].Value)
                    {
                        dataGridView1.Rows[i].Cells[5].Value = "linear";
                        MessageBox.Show("Passed through linear if,the value is " + dataGridView1.Rows[i].Cells[6].Value  + " and " + dataGridView1.Rows[i].Cells[7].Value);
                    }
                    else 
                    {
                        dataGridView1.Rows[i].Cells[5].Value = "flat";
                    }
                }
                else
                {
                    empty_row = 1; // 1 when there is an empty cell
                }
                empty_row = 0; // reset
            }
        }
    } '''

the cells are different values,it passes through the case in which they're different values

the cells are the same value,but it passes through the case in which they're not

解决方法

@JohnG在上面的评论中回答了问题,并解决了我的问题,

“我非常确定“ if”语句…if(dataGridView1.Rows [i] .Cells [3] .Value!= dataGridView1.Rows [i] .Cells [4] .Value){…}总是返回true。dataGridView1.Rows [i] .Cells [3] .Value将返回一个对象,dataGridView1.Rows [i] .Cells [4] .Value…显然将不是同一对象。确信需要将这些对象转换为int并进行比较。在这种情况下,由于比较是“等于”,因此可以比较字符串,但是如果需要“ ”…,则需要转换值转换为整数。”