下面是打开的界面(红色部分为重要代码,一句简洁的代码能做出比较复杂的操作)
1.获取全部数据后。形成一个基础list,装入全部数据,以后对这个表进行提取数据。
private rgdataprocess objrgdataprocess = new rgdataprocess();
List
rgdata = objrgdataprocess.Getbm();获取数据的操作。
去重的操作见下,只留下d.bmbm, d.bmtxt完全相同的一个,其它都不要,为了展示在datagridview1中。
var rgdata_bm = rgdata.GroupBy(d => new { d.bmbm, d.bmtxt }) //linq去重部门
.Select(d => d.FirstOrDefault())
.ToList();
去重的操作见下,只留下员工完全相同的一个,其它都不要,为了展示在datagridview2中。
var rgdata_name = rgdata.GroupBy(d => new { d.name }) //linq去重姓名
.Select(d => d.FirstOrDefault())
.ToList();
2.这里datagridview都有复选框,就是体现联动效果 ,需要添加datagridview事件。复选dataGridView1,dataGridView2产生联动效果(dataGridView2也可以自己复选)
复选框变动事件:dataGridView1_CellContentClick,dataGridView2_CellContentClick
事件代码:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//动态获取部门集合
bmdata.Clear();
for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
{
if (dataGridView1.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True")
bmdata.Add(new rg()
{
bmbm = dataGridView1.Rows[i].Cells[1].EditedFormattedValue.ToString(),
bmtxt = dataGridView1.Rows[i].Cells[2].EditedFormattedValue.ToString(),
});
}
//动态获取部门下所有人员,这个是根据部门范围获取部门下的所有员工,bm_yg是大范围的表,根据bmdata中的部门编号,获取bm_yg的部门人员。就是对bm_yg进行筛选。
var myrg = bm_yg.Where(s => bmdata.Any(c => c.bmbm.Equals(s.bmbm)));
//将myrg转化为list
List
for (int i = 0; i < this.dataGridView2.Rows.Count; i++)
{
dataGridView2.Rows[i].Cells[0].Value = false;
for (int ii = 0; ii < myrg00.Count; ii++)
{
if (dataGridView2.Rows[i].Cells[1].EditedFormattedValue.ToString() == myrg00[ii].name.ToString())
{
dataGridView2.Rows[i].Cells[0].Value = "True";
}
}
}
dataGridView2_CellContentClick(null, null);
}
private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
string name = "";
int a = 0;
textBox1.Text = "";
myrg01.Clear();
for (int i = 0; i < this.dataGridView2.Rows.Count; i++)
{
if (dataGridView2.Rows[i].Cells[0].EditedFormattedValue.ToString() == "True")
{
name = name + " " + dataGridView2.Rows[i].Cells[1].EditedFormattedValue.ToString();
a++;
myrg01.Add(new rg()
{
name = dataGridView2.Rows[i].Cells[1].EditedFormattedValue.ToString()
});
}
}
if (a > 0)
{
label3.Text = "人员名单(共有" + a + "人选中)";
textBox1.Text = name; //这个在下面的文本框列示名单详细
}
else
{
label3.Text = "人员名单";
}
}
3.dataGridView1和dataGridView2上面都有checkBox,所以也有事件checkBox_CheckedChanged。体现全选和全不选。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{ checkBox1.Text = "全不选"; }
else
{ checkBox1.Text = "全选"; }
for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
{
if (checkBox1.Checked == true)
{ dataGridView1.Rows[i].Cells["fx"].Value = true; }
else
{ dataGridView1.Rows[i].Cells["fx"].Value = false; }
}
dataGridView1_CellContentClick(null, null);
dataGridView2_CellContentClick(null, null);
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked == true)
{ checkBox2.Text = "全不选"; }
else
{ checkBox2.Text = "全选"; }
for (int i = 0; i < this.dataGridView2.Rows.Count; i++)
{
if (checkBox2.Checked == true)
{ dataGridView2.Rows[i].Cells["fx1"].Value = true; }
else
{ dataGridView2.Rows[i].Cells["fx1"].Value = false; }
}
dataGridView2_CellContentClick(null, null);
}