在实际运用中,有时需要在对话框中添加数据,添加完成后需要数据立马显示到Treeview控件和datagridview控件上,但又不能重新绑定DataSource时,你需要用到委托,在winform中新建一个类,在类中声名事件的委托类型,在方法前加上delegate即可,如下所示:
public delegate void AddItemHandler(Object obj);
在对话框窗体中添加声明事件本身(event),如下所示:
public event AddItemHandler AfterAdded;
在对话窗体处理完添加或修改逻辑后,调用事件,如下所示,obj是你添加或修改后的对象信息
AfterAdded(obj);
主界面在跳转到对话框的时候需要关联事件,UpdateTreeNode是主窗体中处理Treeview和datagridview刷新数据的方法,如下所示:
private void btn_Click(object sender, EventArgs e)
{
FormAddObj formAddObj = new FormAddObj();
formAddObj .AfterAdded += new AddItemHandler(UpdateTreeNode);
formAddObj .ShowDialog();
}
TreeNode rootNode = null;//树形节点的根节点,绑定Treeview数据时用到
TreeNode stuNode = null;//子节点
private void UpdateTreeNode(Object obj)
{
Student stu= obj as Student ;//Student 可以替换为你需要的实体类
stuNode = new TreeNode(stu.name);
rootNode.Nodes.Add(stuNode) ; //至此Treeview显示新添加数据已完成,
//显示新添加的datagridview数据
DataColumnCollection stuDcc = stuInfo.Columns;
DataRow row = stunfo.NewRow();
row["Id"] =stu.Id;
row["Name"] = stu.Name;
row["Sex"] = stu.Sex;
bayInfo.Rows.Add(row);
datagridview.DataSource = stuInfo;
}
绑定datagridview数据的方式如下:
DataGridViewTextBoxColumn tbName = new DataGridViewTextBoxColumn();
tbName.DataPropertyName = "Name";
tbName.HeaderText = "姓名";
tbName.Name = "Name";
DataGridViewTextBoxColumn tbSex= new DataGridViewTextBoxColumn();
tbSex.DataPropertyName = "Sex";
tbSex.HeaderText = "性别";
tbSex.Name = "Sex";
datagridview.Columns.AddRange(tbName, tbSex);
DataTable stuInfo= new DataTable();
DataColumnCollection stuDcc = stuInfo.Columns;
stuDcc .Add("Id", typeof(int));
stuDcc .Add("Name", typeof(string));
stuDcc .Add("Sex", typeof(string));
DataRow row = null;
IEnumerable<Student> stuList = StudentBLL.QueryStudent();
foreach (Student stu in stuList )
{
row = stu Info.NewRow();
row["Id"] = stu .Id;
row["Name"] = stu .Name;
row["Sex"] = stu .Sex;
stuInfo.Rows.Add(row);
}
datagridview.DataSource = stuInfo;
datagridview.Columns["Id"].Visible = false;