2017-05-03 87 views
0

在表單上是DGV,其中從數據庫中讀取信息(使用linq2sql類)。 有一個LINQ的要求,如:如何重新繪製DataGridView作爲linq查詢的結果

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 在第二個屏幕上,公司字段被選中,這就是我想要實現的。 (從另一個項目與另一個實施屏幕) 我該怎麼做?

what i want to achieve

回答

0

你仍然返回數據中包含的Registrs表頭,你只是確保所有這些列的數據爲空。校正該

的一種方法是,以更新DataGridView中的列的可視性與每個CheckBox對齊,像這樣:

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; 

列也可以使用索引中引用,例如DataGridView.Columns[0].Visible

+0

我收到錯誤「對象引用不指向該對象的一個​​實例」每個字符串上 registrDataGridView.Columns [「Date」]。Visible = checkBox1.Checked;等等...... – SoftySh

+0

有點奇怪,我已經在VS2016中自己測試過了,它工作的很好。你可以嘗試使用索引來查看這是否有效? – Chawin

+0

與索引相同的錯誤 – SoftySh