[ASP.NET]Repeater的使用方法

来源:互联网 发布:卡梅伦与猪 知乎 编辑:程序博客网 时间:2024/05/17 21:46

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
原创粉丝点击