如何通过linq查询重绘DataGridView

时间:2017-05-03 10:56:29

标签: c# linq datagridview

表单上是DGV,其中从数据库中读取信息(使用linq2sql类)。 有一个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

1 个答案:

答案 0 :(得分: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