[ASP.NET]Repeater的使用方法

ASP.NET控件第三篇----Repeater

首先是HTML代码

为控件绑定数据的方法 Text='<%#Eval("")%>'

<asp:Repeater ID="rpStudent" runat="server" OnItemCommand="rpStudento_ItemCommand">
            <HeaderTemplate><%--存放表头--%>  
                <table style="width: 100%; white-space: nowrap">
            </HeaderTemplate>
            <ItemTemplate><%--存放需要重复生成的行,即需要重复生成的行的一个模板,只能包含一对<tr></tr>--%>  
                <tr>
                    <td style="width: 130px">
                        <asp:Label ID="labStudentName" runat="server" Text="学生姓名"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="tbStudentName" runat="server" Text='<%#Eval("StudentName")%>'></asp:TextBox>

                    </td>
                    <td>
                        <asp:Label ID="labStudentNo" runat="server" Text="学生学号"></asp:Label></td>
                    <td>
                        <asp:TextBox ID="tbStudentNo" runat="server" Text='<%#Eval("StudentNo")%>'></asp:TextBox></td>
                    <td>
                        <asp:LinkButton ID="lnkDel" runat="server" Text="删除" CommandName="Delete"></asp:LinkButton>
                        <asp:HiddenField ID="hidStudentID" runat="server" Value='<%#Eval("StudentID") %>' />
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate><%--存放表格其他的部分--%>
                <tr>
                    <td colspan="4">
                        <asp:LinkButton ID="lnkNewStudentInfo" runat="server" Text="新增"  commandName="New"></asp:LinkButton>
                    </td>
                </tr>

                </table>
            </FooterTemplate>
        </asp:Repeater>
        <asp:Button ID="btnSaveCustInfo" runat="server" OnClick="btnSaveCustInfo_Click" Text="保存" />



C#的代码,第一次加载页面的时候绑定数据

protected void Page_Load(object sender, EventArgs e)
        {
            //第一次加载绑定数据,一定要加(!IsPostBack),否则PostBack会报错
            if (!IsPostBack)
            {
                InitData();
                DataBinds();
            }
        }
        protected void InitData()//生成一个空的DataTable
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("StudentID", typeof(string));
                dt.Columns.Add("StudentName", typeof(string));
                dt.Columns.Add("StudentNo", typeof(string));

                for (int i = 0; i < 1; i++)
                {
                    DataRow dr = dt.NewRow();
                    dr["StudentID"] = "";
                    dr["StudentName"] = "";
                    dr["StudentNo"] = "";
                    dt.Rows.Add(dr);
                }
                ViewState.Add("Data", dt);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        protected void DataBinds()//绑定数据
        {
            rpStudent.DataSource = ViewState["Data"] as DataTable;
            rpStudent.DataBind();
        }

Repeater中的所有控件操作可以放在 OnItemCommand中,在控件中增加 CommandName属性

自定义一个名字,以便执行OnItemCommand中对应的操作

在本例子中,Repeater有两个LinkButton分别执行新增和删除的操作

对应的CommandName分别为New和Delete

OnItemCommand的C#代码如下

  protected void rpStudento_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "Delete")//删除学生信息
                {

                    string ls_StudentID = (e.Item.FindControl("hidStudentID") as HiddenField).Value;
                        //判断Item的数目,大于一条,直接删除数据
                        if (rpStudent.Items.Count > 1)
                        {
                            DataTable dt = CopyFormData();//复制数据

                            dt.Rows.RemoveAt(e.Item.ItemIndex);//移除Item

                            ViewState.Add("Data", dt);

                            DataBinds();//重新绑定数据
                        }
                         //Item数目等于1,删除数据之后新增一条空的记录
                        else
                        {
                            DataTable dt = CopyFormData();//复制数据
                            dt.Rows.RemoveAt(e.Item.ItemIndex);//移除Item

                            DataRow dr = dt.NewRow();//新增空行

                            dt.Rows.Add(dr);

                            ViewState.Add("Data", dt);

                            DataBinds();//重新绑定数据
                        }
                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            try
            {
                if (e.CommandName == "New")//新增学生信息
                {
                    DataTable dt = CopyFormData();//复制数据

                    DataRow dr = dt.NewRow();//新增一行

                    dt.Rows.Add(dr);//将新增的行加入Datatable中

                    ViewState.Add("Data", dt);

                    DataBinds();//重新绑定数据
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        protected DataTable CopyFormData()//复制数据
        {
            DataTable dt = (ViewState["Data"] as DataTable).Clone();
            try
            {
                foreach (RepeaterItem ri in rpStudent.Items)
                {
                    DataRow dr = dt.NewRow();
                    dr["StudentID"] = (ri.FindControl("hidStudentID") as HiddenField).Value;
                    dr["StudentName"] = (ri.FindControl("tbStudentName") as TextBox).Text;
                    dr["StudentNo"] = (ri.FindControl("tbStudentNo") as TextBox).Text;
                    dt.Rows.Add(dr);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return dt;
        }

获取Repeater数据的方法

protected void btnSaveCustInfo_Click(object sender, EventArgs e)
        {
            try
            {
                List<string[]> list = new List<string[]>();
                list.Clear();
                for (int i = 0; i < rpStudent.Items.Count; i++)
                {
                    string ls_StudentName = (rpStudent.Items[i].FindControl("tbStudentName") as TextBox).Text;
                    string ls_StudentNo = (rpStudent.Items[i].FindControl("tbStudentNo") as TextBox).Text;
                    string ls_StudentID = (rpStudent.Items[i].FindControl("hidStudentID") as HiddenField).Value;
                    string info = ls_StudentName + "," + ls_StudentNo + "," + ls_StudentID;
                    string[] info_Array = info.Split(',');
                    list.Add(info_Array);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值