日期:2014-05-17 浏览次数:21008 次
做教师考评系统前台界面,要求加上批量处理,需要在前台显示被测评人的人名,最开始使用的是treeview控件,但是因为每组分类的人数不均,多的话可能一百条,所以用treeview就显得有些力不从心了,最终决定做一个既能像treeview一样是树形结构,又能没列显示多条数据使空间变小的控件组。
Treeview控件的灵活性就在于它是后台绑定的,数据可以根据数据库的变更而更新,所以,我们要想实现这一效果,必须得用到动态绑定控件。
前台代码:
<asp:Button ID="createbutton" runat="server" Text="显示按钮" onclick="createbutton_Click" /> <asp:Table ID="HolderTable" CssClass ="tab" runat="server" BorderColor="#000066" BorderStyle="Solid"></asp:Table> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
在后台执行数据绑定:
void CreateControl() { MgrDivisionManager division = new MgrDivisionManager(); DataTable dat = division.QueryAllDivision(); MgrCriticsMain staff = new MgrCriticsMain(); if (ViewState["CreateControl"] == null) return; for (int x = 0; x < dat.Rows.Count; x++) { TableRow row = new TableRow(); TableCell cell = new TableCell(); EnStaff enStaff = new EnStaff(); enStaff.EmployeeID = "6"; enStaff.GradeGroupID = Convert.ToInt32(dat.Rows[x][0].ToString()); DataTable dtStaff = new DataTable(); dtStaff = staff.QueryEligibleByCritics(enStaff); if (dtStaff.Rows.Count > 0) { Button bt = new Button(); bt.Text = dat.Rows[x][1].ToString(); bt.ID = dat.Rows[x][0].ToString(); bt.Width = 200; CheckBoxList cblist = new CheckBoxList(); cblist.DataSource = dtStaff; cblist.ID = "cblist" + dat.Rows[x][0].ToString(); ; cblist.DataTextField = "参评者"; cblist.DataValueField = "编号"; cblist.RepeatColumns = 10; cblist.DataBind(); cell.Controls.Add(bt); cell.Controls.Add(cblist); row.Cells.Add(cell); HolderTable.Rows.Add(row); } } }
当然,这样显示是没有问题了,显示出来的目的就是为了使用,所以,我们还需要从后台获取绑定的控件的值
protected void Button1_Click(object sender, EventArgs e) { CheckBoxList cbk = HolderTable.FindControl("cblist1") as CheckBoxList; string selval = ""; for(int i=0;i<cbk.Items.Count;i++) { if(cbk.Items[i].Selected ) { if (cbk.Items[i].Text.IndexOf("其它") != -1) { selval += "|"; } else { selval += cbk.Items[i].Text + "|"; } } } Response.Write( selval); }
最终显示效果为:
最开始在做treeview之前,我们就认为这是一个不可能实现的工作,最终我们实现了,在需要修改的时候我同样认为这是一个很需要时间的工作,最终也就半天就完成了,其实通过这次改动也就发现,只要有需求,就有思考,就能做出来。
&