总结:1.datagridview的复选框可以形成事件(单击不能连续过快,形成双击事件没有反馈);2.list表可以去重,两个list可以按共同取交集;3.复选框可以归到一组中,然后循环进行判断和操作。
经验:开发中,数据量不是特别大的,可以一次性放入内存中,然后通过linq进行各种处理,效率极高。否则每次都访问数据库,浪费资源,速度也慢。
按钮事件代码
private void button1_Click(object sender, EventArgs e)
{
//准备工作 1.确定年度;2.确定月份并将选定月份形成分布表;3.清空datagridview
//1
string year;
if (radioButton2.Checked){ year = "2022";}
else{ year = "2021"; }
//2
rgmonth.Clear();
foreach (System.Windows.Forms.CheckBox checkBox in groupBox2.Controls)
{
if (checkBox.Checked)
{
rgmonth.Add(new rg()
{
month = checkBox.Name.ToString().Remove(0, 2)
});
}
}
//3
this.dataGridView3.DataSource = null;
//数据处理工作 1.按选择年度提取数据;2.按月份集合提取数据;3.按部门或员工选项提取数据
//1.
rgdata_year = (from b in rgdata where (b.year.Equals(year)) select b).ToList
//2.确定年度后动态获取月份数据
var rg_month = rgdata_year.Where(s => rgmonth.Any(c => c.month.Equals(s.month)));
List
//
data_rg.Clear();
if (radioButton4.Checked) //部门
{
//临时表
var data = rgdata_month.Where(s => bmdata.Any(c => c.bmbm.Equals(s.bmbm)));
data_rg = data.ToList();
}
else //员工 myrg01
{
var data = rgdata_month.Where(s => myrg01.Any(c => c.name.Equals(s.name)));
data_rg = data.ToList();
}
this.dataGridView3.DataSource = data_rg;
decimal xc = 0 ;
decimal wxyj = 0 ;
decimal total = 0 ;
for (int i = 0; i < data_rg.Count; i++)
{
xc = xc + data_rg[i].xc;
wxyj = wxyj + data_rg[i].wxyj;
total = total + data_rg[i].total;
}
label4.Text = "应付薪酬:" + xc.ToString("N0") + " " + "公司承担险金:" + wxyj.ToString("N0") + " " + "人工总计:" + total.ToString("N0");
//label5.Text = "公司承担险金:" + wxyj.ToString("N0");
//label6.Text = "人工总计:" + total.ToString("N0");
}
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
if (checkBox3.Checked) //全选中
{
foreach (System.Windows.Forms.CheckBox checkBox in groupBox2.Controls)
{
checkBox.Checked = true;
}
}
else //
{
foreach (System.Windows.Forms.CheckBox checkBox in groupBox2.Controls)
{
checkBox.Checked = false;
}
}
}