我正在为学校写一个关于c#的基本程序,并且遇到条件得到满足的if语句有问题,但代码被跳过,好像条件没有得到满足。
//this runs when i select a cell on the dataGridView
private void dataGridView1_CellClick(object sender,DataGridViewCellEventArgs e)
{
string estado = "";
if (e.RowIndex >= 0)
{
DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
id_lbl.Text = row.Cells[0].Value.ToString();
nombre_lbl.Text = row.Cells[1].Value.ToString();
apellido_lbl.Text = row.Cells[2].Value.ToString();
estado = row.Cells[7].Value.ToString();
}
id_lbl.Visible = true;
nombre_lbl.Visible = true;
apellido_lbl.Visible = true;
if(estado == "Activo")
{
baja_btn.Enabled = true;
}
else if (estado == "NoActivo")
{
alta_btn.Enabled = true;
}
else
{
MessageBox.Show(estado);
}
}
代码运行但如果语句直接跳转到else代码并且消息框显示Activo,那么baja_btn.Enabled = true;
不会运行。
如果我用NoActivo选择行,情况也是如此。如果直接跳到其他地方......
注意:在进入if语句之前,estado的ACTUAL值是Activo。所以它应该进入第一个条件,但它一直跳到其他地方..
答案 0 :(得分:1)
两个string
不相等。要查看位置和原因,让我们尝试调试报告(就在if
之前):
...
String report = String.Format(
"Tested [{0}] encoded {1} of length {2}\r\nActual [{3}] encoded {4} of length {5}",
estado,
String.Join(" ", estado.Select(c => ((int) c).ToString("x4"))),
estado.Length,
"Activo", // <- copy/paste all "Activo" from the if
String.Join(" ", "Activo".Select(c => ((int) c).ToString("x4"))),
"Activo".Length);
MessageBox.Show(report);
if(estado == "Activo") // <- if of the question
...
请看一下报告:你在哪里有分歧?我有两个相等的字符串
经测试[Activo]编码0041 0063 0074 0069 0076 006f长度为6
实际[Activo]编码0041 0063 0074 0069 0076 006f,长度为6
但在你的情况下应该存在差异
编辑:实验表明测试值为
测试[Activo] 0041 0063 0074 0069 0076 006f 0020 0020 0020 0020 of lenght 10
所以你有尾随空格,这是许多RDBMS的典型特征:你在表格中有CHAR(10)
字段,所以给你 10 < / strong>字符串。要解决此问题,您只需修剪尾随空格:
if (estado.TrimEnd() == "Activo")
{
baja_btn.Enabled = true;
}