0

WPF リストボックスに次のアイテム A (文字列) とアイテム B (10 進数) があります。
それぞれのデータ型で MS SQL データベースのテーブルに保存する つもりです。

  DataClasses1DataContext dc = new DataClasses1DataContext();
 foreach (var items in MyListBox.Items)
       { 
            //I was thinking in this terms but I doubt if its the correct code
           items=MyListBox.Items.Cast<String>().ToList();

            //
            //Then use this Linq Statement to insert the data
            Student std = new Student();
            std.Name=items
            std.Marks=items
            dc.Student.InsertOnSubmit(std);
            dc.SubmitChanges();
        }

説明が必要な場合はお尋ねください。私はまだ C#、wpf、Linq に慣れています

4

1 に答える 1

0

これは、ListBox の内容から生徒のリストを作成するアルゴリズムです。ここではエラー チェックは行われないため、必要に応じて後で処理する必要があります。後半で少し説明します。

List<Student> students = new List<Student>();
double dub = 0;
items = MyListBox.Items.Cast<String>().ToList();

for (int i = 0; i < items.Length; i++)
{
     if (i % 2 == 0)
     {
         dub = double.Parse(items[i]);
     }
     else
     {
         Student s = new Student();
         s.Name = items[i];
         s.Marks = dub;
         students.Add(s);
     }
}

さて、これがどのように機能するかです。ループの外側で、生徒のリストを割り当てます。これは、リストボックスから来る不明な数の生徒を保持するために必要です。for each ではなく for ループを使用して、mod 演算子を使用して値が double か string かを確認できるようにしました。ダブルスが最初に来るはずなので、それを一時変数に保持しています。double の場合は、解析して結果をダブに割り当てます。if i % 2 != 0 の場合、ペアを扱っているため、現在の項目は名前です。そのため、else ブロックを使用しても安全です。else ブロックで、新しい学生オブジェクトを割り当て、現在のアイテムで名前を設定します。次に、キャッシュされた double でマークを設定します。その時点で、リストに追加するだけです。別の方法として、else ブロックで、double と文字列を受け入れて代入を行うコンストラクターを使用することもできます。

于 2013-05-23T21:46:19.623 に答える