2016-04-08 7 views
0

私はここで多くの類似の質問を見つけましたが、答えのどれも私を助けてくれないようです。私はC#の初心者です。私は根本的に何かをやっているような気がします。 とにかく、SQLデータベースにBIT列があります。私はそのデータを取得し、それらが本当であるかどうか、そしてそれらがオブジェクトの名前をWindowsフォームのリストボックスに出力されているかどうかをチェックしようとしています。私はそれを十分に説明してくれることを願っています...ここにコードがあります。私はその後、私は、データベースを照会したDataTableにアイテムを入れて、私はオブジェクトのリストを繰り返してチェックする値

public class lb1items 
{ 
    public string item1 { get; set; } 
    public string item2 { get; set; } 
    public string item3 { get; set; } 
    public string item4 { get; set; } 
    public string item5 { get; set; } 
    public string item6 { get; set; } 
    public string item7 { get; set; } 
    public string item8 { get; set; } 
    public string item9 { get; set; } 
} 

を使用しているだろう、すべてのアイテムのクラスを作成し

まず

List<lb1items> varslist = new List<lb1items>(); 
varslist.Add(new lb1items() 
{ 
    item1 = (dt.Rows[rowIndex]["Item1"].ToString()), 
    item2 = (dt.Rows[rowIndex]["Item2"].ToString()), 
    item3 = (dt.Rows[rowIndex]["Item3"].ToString()), 
    item4 = (dt.Rows[rowIndex]["Item4"].ToString()), 
    item5 = (dt.Rows[rowIndex]["Item5"].ToString()), 
    item6 = (dt.Rows[rowIndex]["Item6"].ToString()), 
    item7 = (dt.Rows[rowIndex]["Item7"].ToString()), 
    item8 = (dt.Rows[rowIndex]["Item8"].ToString()), 
    item9 = (dt.Rows[rowIndex]["Item9"].ToString()) 
}); 
リストにデータテーブルから引き出します

ここまでは、デバッグ時にすべて正常に動作します。私はvarslistを開いて真のfalse値を持つすべての項目を見ることができます。ここでは問題が発生しています。

私はループを返します。これは、varslist.count()に対してですが、私がデビューしたときには8の代わりに1の値しか得られませんでしたか?そして、それは間違いの文とは、チェックボックスに何も追加しない場合は、ここでのコードは

ある
for(int i = 0; i < varslist.Count(); i++) 
{ 
    if (varslist[i].ToString() == "True") 
    { 
     listBox1.Items.Add(varslist[i]); 
    } 
} 

に対して項目の値をチェックしていないようだ私はここで何をしないのですか?見ていただきありがとうございます!

EDIT:私が達成しようとしているのは、リストボックスにDBホース値== trueのビット列名を追加することです。

EDIT2:私は代わりに私がチェックしたメソッドを作成したいと思った道をそれを把握することができませんでしたが、その列は、それがリストボックス

public void addtoListBox(string fName) 
    { 
     if (dt.Rows[rowIndex][fName].ToString() == "True") 
     { 
      listBox1.Items.Add(fName); 
     } 

    addtoListBox("Item1"..."Item9"); 
+1

"item1" ... "item9"は行または列であると考えられますか?今のところ、Count()== 1しか得られない列です。また、 'varslist [i] .ToString()'は実際に 'lb1items'クラスの' ToString'メソッドを呼び出しています。 –

+0

上記のコードでは、varListコレクションにlb1Itemsのインスタンスを1つだけ追加します。これはvarslist.Count()が1の理由です。次にvarsList [I] .ToString()を比較します。これはおそらくあなたがやりたいことではなく、varslist [I] .item1またはそれと似ています。最後に、あなたのコードにはチェックボックスは含まれていません。 – user469104

+0

[列がBITとして定義されている場合は、代わりに 'GetBoolean'を使用することができます。](http://stackoverflow.com/questions/1335066/getting-a-bit-from-sqlserver-into-c-sharp) – Prix

答えて

1
にこれを追加しました本当だったならば、文字列として、列の名前を取りました

問題は、S.Akbariが述べたように、列挙可能な値の集合ではなく別個のプロパティを持つオブジェクトを使用しているということです。

コードは、列/値のコレクションを反復処理できるように、このようになります。

List<string> varslist = new List<string>(); 

var rowIndex = 0; 
foreach (var col in dt.Columns) 
{ 
    varslist.Add(dt.Rows[rowIndex][col.ToString()].ToString()); 
} 

foreach(var value in varslist) 
{ 
    if (value == "True") 
    { 
     listBox1.Items.Add(value); 
    } 
} 
+0

これは動作しますが、trueが見つかったときにlistbox1に "True"を追加します。リストボックスで取得しようとしている列名、つまり値が真である列名を追加しません。申し訳ありませんが、元のリクエストを編集するように正確に説明していません。 – WBratz