2012-03-06 8 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()されたオブジェクトのように見えるのかわかりません。

私は次に何をすべきか迷っています。助言がありますか?

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'ブロックを持たないこともお勧めします。そうすることで、例外が蔓延する。 –

+0

@BryanCrosbyありがとうございますが、私はそれらを空白にしておくことは私たちの元デベロッパーの悪い習慣であることを認識しています。 – Amicable

答えて

2

表示する列の名前にComboBoxDisplayMemberプロパティを設定する必要があります。

+0

これは既に設定されていますが、実際に制御していることを常に知っています。さらにこれを排除することで、データベースサービスと通信するために使用するプラグインを調整するという実際の解決策につながりました。ありがとうございます:) – Amicable

関連する問題