Handling Repeater Control Events : Repeater « Data Binding « ASP.NET Tutorial






<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    string DataKeyName = "Id";
    Hashtable Keys
    {
        get
        {
            if (ViewState["Keys"] == null)
                ViewState["Keys"] = new Hashtable();
            return (Hashtable)ViewState["Keys"];
        }

    }
    protected void rptProducts_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
          ListItemType.AlternatingItem)
        {
            Keys.Add(e.Item.ItemIndex, DataBinder.Eval(e.Item.DataItem, "Id"));
        }
    }
    protected void rptProducts_DataBinding(object sender, EventArgs e)
    {
        Keys.Clear();
    }
    protected void rptProducts_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "Update":
                UpdateProduct(e);
                break;
            case "Insert":
                InsertProduct(e);
                break;
            case "Delete":
                DeleteProduct(e);
                break;
        }
    }
    void UpdateProduct(RepeaterCommandEventArgs e)
    {
        TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
        TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
        CheckBox chkInStock = (CheckBox)e.Item.FindControl("chkInStock");

        srcProducts.UpdateParameters["Id"].DefaultValue = Keys[e.Item.ItemIndex].ToString();
        srcProducts.UpdateParameters["Title"].DefaultValue = txtTitle.Text;
        srcProducts.UpdateParameters["Director"].DefaultValue = txtDirector.Text;
        srcProducts.UpdateParameters["InStock"].DefaultValue = chkInStock.Checked.ToString();
        srcProducts.Update();
    }
    void InsertProduct(RepeaterCommandEventArgs e)
    {
        TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
        TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
        CheckBox chkInStock = (CheckBox)e.Item.FindControl("chkInStock");

        srcProducts.InsertParameters["Title"].DefaultValue = txtTitle.Text;
        srcProducts.InsertParameters["Director"].DefaultValue = txtDirector.Text;
        srcProducts.InsertParameters["InStock"].DefaultValue = chkInStock.Checked.ToString();

        srcProducts.Insert();
    }

    void DeleteProduct(RepeaterCommandEventArgs e)
    {
        srcProducts.DeleteParameters["Id"].DefaultValue = Keys[e.Item.ItemIndex].ToString();
        srcProducts.Delete();
    }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <form id="form1" runat="server">
    <div class="content">

    <asp:Repeater
        id="rptProducts"
        DataSourceID="srcProducts"
        Runat="server" OnItemCommand="rptProducts_ItemCommand" OnItemDataBound=
          "rptProducts_ItemDataBound" OnDataBinding="rptProducts_DataBinding">
        <HeaderTemplate>
        <table class="products">
        <tr>
            <td>Title</td>
            <td>Director</td>
            <td>In Theaters</td>
        </tr>
        </HeaderTemplate>
        <ItemTemplate>
        <tr>
            <td>
            <asp:TextBox
                id="txtTitle"
                Text='<%#Eval("Title")%>'
                Runat="server" />
            </td>
            <td>
            <asp:TextBox
                id="txtDirector"
                Text='<%#Eval("Director")%>'
                Runat="server" />
            </td>
            <td>
            <asp:CheckBox
                id="chkInStock"
                Checked='<%#Eval("InStock")%>'
                Runat="server" />
            </td>
            <td>
            <asp:LinkButton
                id="lnkUpdate"
                CommandName="Update"
                Text="Update"
                Runat="server" />
            &nbsp;|&nbsp;
            <asp:LinkButton
                id="lnkDelete"
                CommandName="Delete"
                Text="Delete"
                OnClientClick="return confirm('Are you sure?');"
                Runat="server" />
            </td>
        </tr>
        </ItemTemplate>
        <FooterTemplate>
        <tr>
            <td>
            <asp:TextBox
                id="txtTitle"
                Runat="server" />
            </td>
            <td>
            <asp:TextBox
                id="txtDirector"
                Runat="server" />
            </td>
            <td>
            <asp:CheckBox
                id="chkInStock"
                Runat="server" />
            </td>
            <td>
            <asp:LinkButton
                id="lnkInsert"
                CommandName="Insert"
                Text="Insert"
                Runat="server" />
            </td>
        </tr>
        </table>
        </FooterTemplate>
    </asp:Repeater>

    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Id,Title,Director,InStock
            FROM Products"
        UpdateCommand="UPDATE Products SET Title=@Title,
            Director=@Director,InStock=@InStock
            WHERE Id=@Id"
        InsertCommand="INSERT Products (Title,Director,InStock)
            VALUES (@Title,@Director,
        DeleteCommand="DELETE Products WHERE Id=@Id"
        Runat="server">
        <UpdateParameters>
            <asp:Parameter Name="Id" />
            <asp:Parameter Name="Title" />
            <asp:Parameter Name="Director" />
            <asp:Parameter Name="InStock" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="Title" />
            <asp:Parameter Name="Director" />
            <asp:Parameter Name="InStock" />
        </InsertParameters>
        <DeleteParameters>
            <asp:Parameter Name="Id" />
        </DeleteParameters>
    </asp:SqlDataSource>

    </div>
    </form>
</body>
</html>

File: Web.config

<configuration>
  <connectionStrings>
    <add name="Products" 
         connectionString="Data Source=.\SQLEXPRESS;
         AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
  </connectionStrings>
</configuration>








19.23.Repeater
19.23.1.Automatically displays all the pictures in a folder named Photos
19.23.2.Displaying Data with the Repeater Control
19.23.3.Declarative databinding is used to bind the Repeater to the SqlDataSource
19.23.4.Using Templates with the Repeater Control
19.23.5.Displaying a tab strip with the Repeater control.
19.23.6.Handling Repeater Control Events