martes, 11 de septiembre de 2012

Editar GridView con DropDownList y RadioButton dentro de EditItemTemplate en ASP.NET

Bueno en este ejemplo explicare como editar un GridView con el DropDownList y RadioButton en el EditItemTemplate en ASP.NET con C#. Para esto creamos un proyecto web y agregamos un GridView, un SQLDataSource y un Label, al Label le borramos el texto:
configuramos el SQLDataSource para nuestra Base de Datos asi:
la cual contendra una tabla Details con los siguientes valores:
despues de todo esto vamos a la propiedad UpdateQuery para indicarle nuestra consulta:
ahora enlazamos nuestro GridView al SQLDataSource:
ahora nos vamos a la opcion Editar Columnas:
y las columnas ID, Sex y MaritalStatus de tipo BoundField las convierten en TemplateField las columnas convertidas deben quedarles asi:
y agregan una columna tipo CommandField para editar:
Ahora nos vamos a la Opcion Editar Plantillas:
una vez aqui seleccionamos la columna ID y en el label del ItemTemplate damos click en Editar Enlace de Datos, Personalizamos enlace y en Expresion de codigo ponemos Eval("ID") lo mismo con Sex y MaritalStatus, ahora en Sex en EditItemTemplate agregamos un RadioButton y lo personalizamos con las opciones Male, Female.
y lo mismo en MaritalStatus agregamos un DropDownList y lo personalizamos con las opciones Single and Married:
Finalmente dan click en Terminar Edicion de Plantilla. el codigo de la parte html desde el body mas o menos les quedara asi:
<body>
    <form id="form1" runat="server">
    <div>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataSourceID="SqlDataSource1" onrowdatabound="GridView1_RowDataBound" 
            onrowediting="GridView1_RowEditing" onrowupdated="GridView1_RowUpdated" 
            onrowupdating="GridView1_RowUpdating" DataKeyNames="ID">
            <Columns>
                <asp:TemplateField HeaderText="ID" SortExpression="ID">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                <asp:TemplateField HeaderText="Sex" SortExpression="Sex">
                    <EditItemTemplate>
                        <asp:RadioButtonList ID="RadioButtonList1" runat="server">
                            <asp:ListItem>Male</asp:ListItem>
                            <asp:ListItem>Female</asp:ListItem>
                        </asp:RadioButtonList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("Sex") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="MaritalStatus" SortExpression="MaritalStatus">
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server">
                            <asp:ListItem>Single</asp:ListItem>
                            <asp:ListItem>Married</asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label3" runat="server" Text='<%# Eval("MaritalStatus") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:CommandField ShowEditButton="True" />
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            SelectCommand="SELECT [ID], [Name], [Sex], [MaritalStatus] FROM [Details]" 
            UpdateCommand="UPDATE Details SET ID = @ID, Name = @Name, Sex = @Sex, MaritalStatus = @MaritalStatus Where [ID]=@ID">
            <UpdateParameters>
       <asp:Parameter Name="Name" />
       <asp:Parameter Name="Sex" />
       <asp:Parameter Name="ID" />
       <asp:Parameter Name="MaritalStatus" />
   </UpdateParameters>
        </asp:SqlDataSource>
        <br />
        <asp:Label ID="Label1" runat="server"></asp:Label>
    
    </div>
    </form>
</body>
Los eventos que implementaran para GridView seran: RowDataBound,RowEditing, RowUpdating y RowUpdated.
y el codigo para manejar dichos eventos sera el de abajo:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        DataRowView dRowView = (DataRowView)e.Row.DataItem;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                RadioButtonList RadioButtonList1 = (RadioButtonList)e.Row.FindControl("RadioButtonList1");
                DropDownList DropDownList1 = (DropDownList)e.Row.FindControl("DropDownList1");
                RadioButtonList1.SelectedValue = dRowView[2].ToString();
                DropDownList1.SelectedValue = dRowView[3].ToString();
            }
        }
    }
    protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        Label1.Text = "Fila actualizada";
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Label1.Text = "";
    }
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        RadioButtonList RadioButtonList1 = (RadioButtonList)GridView1.Rows[e.RowIndex].FindControl("RadioButtonList1");
        DropDownList DropDownList1 = (DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropDownList1");
        SqlDataSource1.UpdateParameters["Sex"].DefaultValue = RadioButtonList1.SelectedValue;
        SqlDataSource1.UpdateParameters["MaritalStatus"].DefaultValue = DropDownList1.SelectedValue;
    }
Y a la hora de ejecutar debe salirles asi:

1 comentario: