Repeater的应用之嵌套和行操作
来源:互联网 发布:乔麦克纳利 知乎 编辑:程序博客网 时间:2024/05/21 05:57
repeater是一个 轻量级的控件,它具有效率高,使用灵活等特点,可以根据用户的不同需求生成比较复杂的界面。以下是一个简单的例子,通过嵌套实现常见的子报表功能。同时也顺便提了一下对它的基本数据的操作。
请看示例(asp 2.0):
aspx:
<asp:Repeater ID="rp1" runat="server">
<HeaderTemplate>
<table width="100%" border="1" style="border-collapse:collapse;font-size:12px">
<tr>
<th align="center" colspan="3">总门员工表</td>
</tr>
<tr>
<th >部门编号</th>
<th colspan="2">部门名称</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr bgcolor="#336699" style="color:White">
<td><%#Eval("id")%></td>
<td colspan="2"><%#Eval("deptname")%></td>
</tr>
<tr>
<td></td>
<td>
<asp:Repeater ID="rp2" runat="server"
DataSource='<%#((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("RelationName")%>'
OnItemCommand="rp2_ItemCommand"
>
<HeaderTemplate>
<table width="100%" cellspacing="0" border="0" cellpadding="0">
<tr bgcolor="#eeeef1" style="color:black">
<td align="center">删除</td>
<td>员工编号</td>
<td>员工名称</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td align="center">
<asp:LinkButton ID="nkbDelete" OnClientClick="javascript:return confirm('真的要删除吗?');" runat="server" Text="删除" CommandName="delete" CommandArgument='<%#Eval("[id]")%>'></asp:LinkButton>
<asp:CheckBox ID="chkSel" runat="server" OnCheckedChanged="CheckBoxChanged" KeyID='<%#Eval("[id]")%>' AutoPostBack="true" />
<asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="delete" CommandArgument='<%#Eval("[id]")%>' /><label id="divDelete" style="border:solid 1px black;width:60px;" onclick="javascript:this.previousSibling.click();">删除</label>
</td>
<td><%#DataBinder.Eval(Container.DataItem,"[id]")%>
<td><%#Eval("[empname]")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<HeaderTemplate>
<table width="100%" border="1" style="border-collapse:collapse;font-size:12px">
<tr>
<th align="center" colspan="3">总门员工表</td>
</tr>
<tr>
<th >部门编号</th>
<th colspan="2">部门名称</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr bgcolor="#336699" style="color:White">
<td><%#Eval("id")%></td>
<td colspan="2"><%#Eval("deptname")%></td>
</tr>
<tr>
<td></td>
<td>
<asp:Repeater ID="rp2" runat="server"
DataSource='<%#((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("RelationName")%>'
OnItemCommand="rp2_ItemCommand"
>
<HeaderTemplate>
<table width="100%" cellspacing="0" border="0" cellpadding="0">
<tr bgcolor="#eeeef1" style="color:black">
<td align="center">删除</td>
<td>员工编号</td>
<td>员工名称</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td align="center">
<asp:LinkButton ID="nkbDelete" OnClientClick="javascript:return confirm('真的要删除吗?');" runat="server" Text="删除" CommandName="delete" CommandArgument='<%#Eval("[id]")%>'></asp:LinkButton>
<asp:CheckBox ID="chkSel" runat="server" OnCheckedChanged="CheckBoxChanged" KeyID='<%#Eval("[id]")%>' AutoPostBack="true" />
<asp:Button ID="btnDelete" runat="server" Text="删除" CommandName="delete" CommandArgument='<%#Eval("[id]")%>' /><label id="divDelete" style="border:solid 1px black;width:60px;" onclick="javascript:this.previousSibling.click();">删除</label>
</td>
<td><%#DataBinder.Eval(Container.DataItem,"[id]")%>
<td><%#Eval("[empname]")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
后台程序:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this._BindRepeater();
}
}
DataSet _GetDataSet()
{
if (ViewState["ds"] != null)
{
return (DataSet)ViewState["ds"];
}
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("DeptName");
ds.Tables.Add(dt);
dt.Rows.Add(1, "市场部");
dt.Rows.Add(2, "人力资源部");
dt.Rows.Add(3, "金融事业部");
dt.Rows.Add(4, "通信事业部");
dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("deptid", typeof(int));
dt.Columns.Add("empname");
for (int i = 0; i < 20; i++)
{
dt.Rows.Add(i, i % 4 + 1, "员工" + i.ToString());
}
ds.Tables.Add(dt);
///添加主父子关系
ds.Relations.Add("RelationName", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["deptId"]);
ViewState["ds"] = ds;
return ds;
}
void _SaveData(DataSet ds)
{
ViewState["ds"] = ds;
}
void _DeleteData(string sID)
{
DataSet ds = this._GetDataSet();
DataTable dt = ds.Tables[1];
DataRow[] row = dt.Select("id=" + sID);
if (row.Length >= 1)
{
row[0].Delete();
}
this._SaveData(ds);
}
void _BindRepeater()
{
DataSet ds = this._GetDataSet();
this.rp1.DataSource = ds.Tables[0].DefaultView;
this.rp1.DataBind();
}
protected void CheckBoxChanged(object sender,EventArgs e)
{
CheckBox cb = (CheckBox)sender;
string sID = cb.Attributes["KeyID"];
this._DeleteData(sID);
this._BindRepeater();
}
protected void rp2_ItemCommand(object sender,RepeaterCommandEventArgs e)
{
if (e.CommandName == "delete")
{
string sID = e.CommandArgument.ToString();
this._DeleteData(sID);
this._BindRepeater();
}
}
{
if (!this.IsPostBack)
{
this._BindRepeater();
}
}
DataSet _GetDataSet()
{
if (ViewState["ds"] != null)
{
return (DataSet)ViewState["ds"];
}
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("DeptName");
ds.Tables.Add(dt);
dt.Rows.Add(1, "市场部");
dt.Rows.Add(2, "人力资源部");
dt.Rows.Add(3, "金融事业部");
dt.Rows.Add(4, "通信事业部");
dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("deptid", typeof(int));
dt.Columns.Add("empname");
for (int i = 0; i < 20; i++)
{
dt.Rows.Add(i, i % 4 + 1, "员工" + i.ToString());
}
ds.Tables.Add(dt);
///添加主父子关系
ds.Relations.Add("RelationName", ds.Tables[0].Columns["id"], ds.Tables[1].Columns["deptId"]);
ViewState["ds"] = ds;
return ds;
}
void _SaveData(DataSet ds)
{
ViewState["ds"] = ds;
}
void _DeleteData(string sID)
{
DataSet ds = this._GetDataSet();
DataTable dt = ds.Tables[1];
DataRow[] row = dt.Select("id=" + sID);
if (row.Length >= 1)
{
row[0].Delete();
}
this._SaveData(ds);
}
void _BindRepeater()
{
DataSet ds = this._GetDataSet();
this.rp1.DataSource = ds.Tables[0].DefaultView;
this.rp1.DataBind();
}
protected void CheckBoxChanged(object sender,EventArgs e)
{
CheckBox cb = (CheckBox)sender;
string sID = cb.Attributes["KeyID"];
this._DeleteData(sID);
this._BindRepeater();
}
protected void rp2_ItemCommand(object sender,RepeaterCommandEventArgs e)
{
if (e.CommandName == "delete")
{
string sID = e.CommandArgument.ToString();
this._DeleteData(sID);
this._BindRepeater();
}
}
说明:对于repleater的操作。我用了四个基本元素来实现。linkbutton 和button是一样通过指定commandname触发ItemCommand事件,并绑定了CommandArgument以便在后台事件中获取。
而CheckBox并没有commandname和CommandArgument属性,于是我给它指定了一个自定义的属性KeyID,并绑定数据的id字段。然后在checkbox的事件中获取它的属性进行相关数据操作。
label的操作,这就借用了button的事件来实现。这里label可换成任何可显示在网页中的html元素。
- Repeater的应用之嵌套和行操作
- 操作GridView嵌套的Repeater控件
- Datalist和Repeater嵌套
- 前台应用----------嵌套repeater控件
- 嵌套Repeater的问题
- 嵌套的Repeater 控件
- 嵌套Repeater的绑定
- repeater的嵌套方法
- Repeater 的嵌套
- Repeater的嵌套
- Flex控件之repeater和radioButton应用
- asp.net中repeater控件的嵌套和实现分页
- 複雜的Repeater嵌套
- 控件Repeater的嵌套使用
- Flex 下的Repeater嵌套
- 关于repeater嵌套的用法
- Repeater控件的嵌套使用
- Repeater数据控件的嵌套
- Collaborative Filtering for Java
- Hardware input model
- 爱情转移
- 网站繁简转换解决方案--ASP,JSP,PHP,.Net通用
- 保养皮肤的20种方法
- Repeater的应用之嵌套和行操作
- Linux命令_1
- Servlet action is not available 问题解决
- linux下java环境
- VML 画统计 柱状、饼图、折线
- 编写驱动必须清楚的三个概念(soft driver)
- Linux命令_2
- VML多店销售折线图
- 春分