[ASP.NET]Repeaterの使い方


ASP.NETコントロール第三編----REPEter
まずはHTMLコード
コントロールにデータをバインドする方法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では、2つの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 list = new List();
                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;
            }
        }