表单上是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();
}
}
他的工作成果在第一个截图中给出。用户选择所需字段并显示数量和数量。 问题是只显示选定的字段(屏幕上显示空字段)。也就是说,如果用户选择了日期和公司,则显示日期,公司,数量和金额,并且所有其他人都丢失了。 在第二个屏幕上,选择公司字段,这就是我想要实现的目标。 (来自另一个项目的屏幕与另一个实现) 我怎么能这样做?
答案 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
。