ASP.NETではRepeaterによる添削操作を実現


ページ上の「追加」ボタンをクリックしてRepeater内に動的に行を生成し、ユーザーが記入して保存してRepeaterに表示する必要があります.
Repeater内部の各項目に編集と削除機能があり、「編集」をクリックすると、「更新」と「キャンセル」ボタンが表示されます.
これには、Repeaterにドロップダウン・ボックスDropDownListコントロールを含めることも含まれており、データベースのデフォルト値をバインドおよび選択する方法を簡単に理解できます.
すべては以下のコードで、DMはデータベースアクセスクラスで、自分の必要に応じて修正したり、SQLhelperなどを使用したりすることができます.





    


    <form id="form1" runat="server">
    <div>
        <button id="btnNew" runat="server" text="  " onclick="btnNew_OnClick"/>
        <repeater id="rpCustomerInfo" runat="server" onitemdatabound="rpCustomerInfo_ItemDataBound" onitemcommand="rpCustomerInfo_ItemCommand">
            <headertemplate>
                <table>
                    <tr>
                        <th>
                            ID
                        </th>
                        <th>
                              
                        </th>
                        <th>
                              
                        </th>
                        <th>
                              
                        </th>
                    </tr>
                    <panel id="plNew" runat="server" visible="false">
                    <tr>
                        <td>
                            <label id="Label2" runat="server" text="<%#Eval("ID") %>"/>
                        </td>
                        <td>
                            <dropdownlist id="ddlType2" runat="server">
                            </dropdownlist>
                        </td>
                        <td>
                            <textbox id="TextBox2" runat="server" text="<%#Eval("Name")%>"/>
                        </td>
                        <td>
                            <linkbutton runat="server" id="lbtSave" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" commandname="Save" text="  "/>   
                            <linkbutton runat="server" id="lbtCancel2" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" commandname="Cancel2" text="  "/>
                        </td>
                    </tr>
                </panel>
            
            <itemtemplate>
                <panel id="PlItem" runat="server">
                    <tr>
                        <td>
                            <label id="Label3" runat="server" text="<%#Eval("ID") %>"/>
                        </td>
                        <td>
                            <label id="Label4" runat="server" text="<%#Eval("Type") %>"/>
                        </td>
                        <td>
                            <label id="Label5" runat="server" text="<%#Eval("Name") %>"/>
                        </td>
                        <td>
                            <linkbutton runat="server" id="lbtEdit" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" text="  " commandname="Edit"/>   
                            <linkbutton runat="server" id="lbtDelete" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" text="  " commandname="Delete"/>
                        </td>
                    </tr>
                </panel>
                <panel id="plEdit" runat="server">
                    <tr>
                        <td>
                            <label id="Label1" runat="server" text="<%#Eval("ID") %>"/>
                        </td>
                        <td>
                            <dropdownlist id="ddlType" runat="server">
                            </dropdownlist>
                        </td>
                        <td>
                            <textbox id="TextBox1" runat="server" text="<%#Eval("Name")%>"/>
                        </td>
                        <td>
                            <linkbutton runat="server" id="lbtUpdate" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" commandname="Update" text="  "/>   
                            <linkbutton runat="server" id="lbtCancel" commandargument="<%# DataBinder.Eval(Container.DataItem, "ID")%>" commandname="Cancel" text="  "/>
                        </td>
                    </tr>
                </panel>
            </itemtemplate>
            <footertemplate>
                </footertemplate></table>
            
        </headertemplate></repeater>
    </div>
    </form>


</code></pre> 
  <br/> 
  <pre><code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using USTC;

namespace WebApplication1
{
    public partial class DynamicRepeater : System.Web.UI.Page
    {
        DM dm = new DM();
        public int m_iID = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataBinds();
            }
        }

        public void DataBinds()
        {
            string strSQL = "select * from SubTable where MainTableID=1";
            DataTable dt = dm.getsql(strSQL).Tables[0];
            this.rpCustomerInfo.DataSource = dt;
            this.rpCustomerInfo.DataBind();
        }

        protected void btnNew_OnClick(object sender, EventArgs e)
        {
            ((Panel)rpCustomerInfo.Controls[0].FindControl("PlNew")).Visible = true ;
        }


        protected void rpCustomerInfo_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            try
            {
                if (e.Item.ItemType == ListItemType.Header)
                {
                    DropDownList ddl2 = e.Item.FindControl("ddlType2") as DropDownList;
                    string strSQL2 = "select * from DataType";
                    ddl2.DataSource = dm.getsql(strSQL2);
                    ddl2.DataTextField = "Name";
                    ddl2.DataValueField = "ID";
                    ddl2.DataBind();
                    ddl2.Items.Insert(0, "--   --");
                }
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    DropDownList ddl = e.Item.FindControl("ddlType") as DropDownList;
                    string strSQL = "select * from DataType";
                    ddl.DataSource = dm.getsql(strSQL);
                    ddl.DataTextField = "Name";
                    ddl.DataValueField = "ID";
                    ddl.DataBind();
                    //     
                    DataRowView drv = (DataRowView)e.Item.DataItem;
                    ddl.Items.FindByValue(drv["Type"].ToString()).Selected = true;

                    string userid = drv["ID"].ToString();

                    if (userid != m_iID.ToString())
                    {
                        ((Panel)e.Item.FindControl("plItem")).Visible = true;
                        ((Panel)e.Item.FindControl("plEdit")).Visible = false;
                    }
                    else
                    {
                        ((Panel)e.Item.FindControl("plItem")).Visible = false;
                        ((Panel)e.Item.FindControl("plEdit")).Visible = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                ((Panel)e.Item.FindControl("plEdit")).Visible = false;
            }
        }

        protected void rpCustomerInfo_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Save")
            {
                int v1 = int.Parse((e.Item.FindControl("ddlType2") as DropDownList).SelectedItem.Value);
                string v2 = (e.Item.FindControl("TextBox2") as TextBox).Text;
                //  
                string strSQL = "insert into SubTable values(1,"+v1+",'"+v2+"')";
                dm.execsql(strSQL);
            }
            else if (e.CommandName == "SaveCancel")
            {
                (e.Item.FindControl("PlNew") as Panel).Visible = false;
            }
            else if (e.CommandName == "Edit")
            {
                m_iID = int.Parse(e.CommandArgument.ToString());
            }
            else if (e.CommandName == "Cancel")
            {
                m_iID = -1;
            }
            else if (e.CommandName == "Update")
            {
                //  
                int type = int.Parse((this.rpCustomerInfo.Items[e.Item.ItemIndex].FindControl("ddlType") as DropDownList).SelectedItem.Value);
                string name = (this.rpCustomerInfo.Items[e.Item.ItemIndex].FindControl("TextBox1") as TextBox).Text;
                string strSQL = "update SubTable  set Type="+type+",Name='"+name+"' where ID="+int.Parse(e.CommandArgument.ToString());
                dm.execsql(strSQL);
                this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('  ID:" + e.CommandArgument + "');", true);
            }
            else if (e.CommandName == "Delete")
            {
                //  
                string strSQL = "delete from SubTable where ID=" + int.Parse(e.CommandArgument.ToString());
                dm.execsql(strSQL);
                this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "key", "alert('  ID:" + e.CommandArgument + "');", true);
            }
            DataBinds();

        }
    }
}</code></pre> 
  <br/>        Repeater          。 
  <br/> 
   
  <br/> 
 </div> 
</div>
                            </div>
                        </div>