如何解决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并进行比较。在这种情况下,由于比较是“等于”,因此可以比较字符串,但是如果需要“ ”…,则需要转换值转换为整数。”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。