2017-05-03 17 views
0

フォームはDGVで、linq2sqlクラスを使用してデータベースから情報を読み込みます。 LINQ要求は次のように、あります:linqクエリの結果としてDataGridViewを再描画する方法

private void button1_Click_1(object sender, EventArgs e) 
    {using (linqWorkDataContext db = new linqWorkDataContext()) 
     { 
      var regi = (from r in db.Registrs.ToList() 
         group r by new 
         { 
          Date = checkBox1.Checked ? (DateTime?)r.date : (DateTime?)null, 
          Company = checkBox2.Checked ? r.company : null, 
          City = checkBox3.Checked ? r.city : null, 
          Country = checkBox4.Checked ? r.country : null, 
          Manager = checkBox5.Checked ? r.manager : null, 
         } into g 
         select new 
         { 
          Date = checkBox1.Checked ? (DateTime?)g.Key.Date : (DateTime?)null, 
          Company = checkBox2.Checked ? g.Key.Company : null, 
          City = checkBox3.Checked ? g.Key.City : null, 
          Country = checkBox4.Checked ? g.Key.Country : null, 
          Manager = checkBox5.Checked ? g.Key.Manager : null, 
          Quantity = checkBox1.Checked || checkBox2.Checked || checkBox3.Checked || checkBox4.Checked || checkBox5.Checked ? g.Sum(s => s.quantity) : null, 
          Amount = checkBox1.Checked || checkBox2.Checked || checkBox3.Checked || checkBox4.Checked || checkBox5.Checked ? g.Sum(s => s.amount) : null, 
         }).Distinct(); 

      registrDataGridView.DataSource = regi.ToList(); 
     } 
    } 

彼の仕事の結果は、最初のスクリーンショットに示されています。ユーザーは必要な項目を選択し、金額と数量を表示します。 問題は、選択したフィールドのみが表示されることです(空のフィールドが画面に表示されます)。つまり、ユーザーが日付と会社を選択すると、日付、会社、数量、金額が表示され、それ以外はすべて失われました。 my result now 2番目の画面では、会社フィールドが選択されています。これは達成したいことです。 (他のプロジェクトと別の実装の画面) どうすればいいですか?

what i want to achieve

答えて

0

あなたはまだ戻っていたデータがRegistrsのテーブルヘッダが含まれている、あなただけのこれらの列のすべてのデータがNULLであることを確実にしました。

registrDataGridView.Columns["Date"].Visible = checkBox1.Checked; 
registrDataGridView.Columns["Company"].Visible = checkBox2.Checked; 
registrDataGridView.Columns["City"].Visible = checkBox3.Checked; 
registrDataGridView.Columns["Country"].Visible = checkBox4.Checked; 
registrDataGridView.Columns["Manager"].Visible = checkBox5.Checked; 

列はまた、例えば、インデックスを使用して参照することができる。ようなので、これは、各CheckBoxと整列するようにDataGridView内の列の表示を更新することで修正する

一つの方法DataGridView.Columns[0].Visible

+0

この文字列のすべてでオブジェクト参照がオブジェクトのインスタンスを指していません。 registrDataGridView.Columns ["Date"]。Visible = checkBox1.Checked;など... – SoftySh

+0

ビット奇妙な、私はVS2016で自分自身をテストし、それは正常に働いた。インデックスを使用してそれが機能するかどうか試してみることはできますか? – Chawin

+0

インデックスが同じエラー – SoftySh

関連する問題