2012-03-06 31 views
2

我目前正在修改现有的应用程序,我将删除旧的UI元素并用标准的WinForms组件替换它们。所以这段代码看起来很实用。Combobox.Text.Equals未测试预期值

我的代码通过条件IF检查,当它不应该。默认情况下,每个组合框的文本为<Any>,所以它们应跳过已封装的代码。

(当选择的过滤器,它们替换默认文本选择SQL查询的正确部分返回结果)的离奇部分

现在! 我的一些combobox.text文本属性为System.Data.DataRowView。最初,这发生在所有人身上,但现在第一次检查按预期显示为<Any>。 (尽管我根本没有改变任何东西)

Screenshot of problem http://i41.tinypic.com/qnphl2.jpg 正如您在调试过程中的代码截图中所看到的。 cbRegGroup.Text的固定值为System.Data.DataRowView,但是当我输入属性列表并向下滚动到文本属性时,它显示为<Any>

我已经清理并重建了我的项目......并与一所大学协商过,但我们都无法弄清楚为什么文本值显示为.ToString()的ed对象。

我不知道下一步该做什么。有什么建议么?

private void LoadPupilView() 
    { 
     try 
     { 
      this.Cursor = Cursors.WaitCursor; 

      dgMain.Rows.Clear(); 
      //now populate list view 
      String filter = "[surname] LIKE '" + SearchString + "%'"; 
      if (!cbYearGroup.Text.Equals("<Any>")) 
      { 
       String YearGroupCode = null; 
       try 
       { 
        YearGroupCode = cbYearGroup.SelectedValue.ToString(); 
       } 
       catch { } 

       if (!String.IsNullOrEmpty(YearGroupCode)) 
        filter = filter + " AND [yearGroup] LIKE '" + YearGroupCode + "'"; 
      } 

      if (!cbRegGroup.Text.Equals("<Any>")) 
      { 
       String RegGroupCode = null; 
       try 
       { 
        RegGroupCode = cbRegGroup.SelectedValue.ToString(); 
       } 
       catch { } 

       if (!String.IsNullOrEmpty(RegGroupCode)) 
        filter = filter + " AND [registrationGroup] LIKE '" + RegGroupCode + "'"; 
      } 

      if (!cbHouse.Text.Equals("<Any>")) 
      { 
       String HouseGroupCode = null; 
       try 
       { 
        HouseGroupCode = cbHouse.SelectedValue.ToString(); 
       } 
       catch { } 

       if (!String.IsNullOrEmpty(HouseGroupCode)) 
        filter = filter + " AND [houseGroup] LIKE '" + HouseGroupCode + "'"; 
      } 

      DataRow[] dataRows = tblPupils.Select(filter); 
      foreach (DataRow datarow in dataRows) 
      { 
       dgMain.Rows.Add(new object[] { 
        datarow[0].ToString(), 
        datarow[1].ToString() + " " + datarow[2].ToString(), 
        datarow[5].ToString(), 
        datarow[4].ToString(), 
        datarow[6].ToString(), 
        datarow[3].ToString() 
       }); 

      } 
     } 
     catch (Exception err) 
     { 
      MessageBox.Show("Error : " + err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      this.Cursor = Cursors.Default; 
     } 


    } 

我很想知道为什么这似乎不一致......为什么通过第一个条件检查?当其余的不是,虽然他们是相同的。

+1

也不建议有空的catch块。这样做会吞噬异常。 – 2012-03-06 17:29:35

+0

@BryanCrosby谢谢,但我知道让他们为空是我们的前开发者的坏习惯,我有很多他们需要改变! – Amicable 2012-03-06 18:36:21

回答

2

您需要将ComboBoxDisplayMember属性设置为要显示的列的名称。

+0

这些已经设置,但它让我了解他们实际控制哪些总是很好知道。再加上这一点,我决定采用实际的解决方案,其中包括调整我们用来与数据库服务进行通信的插件。所以谢谢 :) – Amicable 2012-03-07 10:34:27