none
Gridview com dropdownlist não atualiza RRS feed

  • Pergunta

  • Opa a todos

    Pessoal tenho um gridview simples e 3 das suas colunas é um dowpdowlist que tem apenas 2 valores Sim e Nao. Quando eu carrego o grid ele mostra tudo certinho mas quando eu clico no editar e troco o valor do dropdonw ele não atualiza no banco. o q eu devo fazer para conseguir esta atualização?

    Obrigado

    <asp:GridView ID="gvDados" runat="server" AllowPaging="True" 
            AutoGenerateColumns="False" CellPadding="4" DataSourceID="odsDados" 
            ForeColor="#333333" GridLines="None" Width="740px">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>            
                <asp:CommandField ShowEditButton="True" ButtonType="Image" 
                    CancelImageUrl="~/imagens/cancelar.png" CancelText="Cancelar" 
                    DeleteText="Excluir" EditImageUrl="~/imagens/edit-icon.gif" EditText="Editar" 
                    UpdateImageUrl="~/imagens/save-icon.gif" UpdateText="Gravar" >
                <ItemStyle HorizontalAlign="Center" Wrap="False" />
                </asp:CommandField>
                <asp:TemplateField HeaderText="Código" SortExpression="codigo">
                    <ItemTemplate>
                        <asp:Label ID="Label2a" runat="server" Text='<%# bind("codigo") %>'></asp:Label>
                    </ItemTemplate>  
                    <ItemStyle HorizontalAlign="Center" Width="60px" />              
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Capa" SortExpression="capa">
                    <ItemTemplate>
                        <asp:Label ID="Label2c" runat="server" Text='<%# iif(eval("abertura")=0,"Sim","Não") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList1" SelectedValue='<%# eval("abertura") %>' 
                            runat="server" >
                            <asp:ListItem Value="0">Sim</asp:ListItem>
                            <asp:ListItem Value="1">Não</asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemStyle HorizontalAlign="Center" Width="100px" />
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Oportunidade" SortExpression="oportunidade">
                    <ItemTemplate>
                        <asp:Label ID="Label2d" runat="server" Text='<%# iif(eval("oportunidade")=0,"Sim","Não") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList2" SelectedValue='<%# eval("oportunidade") %>' runat="server">
                            <asp:ListItem Value="0">Sim</asp:ListItem>
                            <asp:ListItem Value="1">Não</asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemStyle HorizontalAlign="Center" Width="100px" />
                </asp:TemplateField> 
                <asp:TemplateField HeaderText="Destaque" SortExpression="destaque">
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# iif(eval("destaque")=0,"Sim","Não") %>'></asp:Label>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:DropDownList ID="DropDownList3" SelectedValue='<%# eval("destaque") %>' runat="server">
                            <asp:ListItem Value="0">Sim</asp:ListItem>
                            <asp:ListItem Value="1">Não</asp:ListItem>
                        </asp:DropDownList>
                    </EditItemTemplate>
                    <ItemStyle HorizontalAlign="Center" Width="100px" />
                </asp:TemplateField>            
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
        <asp:ObjectDataSource ID="odsDados" runat="server" SelectMethod="lista" 
            TypeName="bllDestaques" UpdateMethod="atualiza">
            <SelectParameters>
                <asp:Parameter DefaultValue="-1" Name="op" Type="Int32" />
                <asp:Parameter DefaultValue="" Name="valor" Type="String" />
            </SelectParameters>
            <UpdateParameters>
                <asp:Parameter Name="codigo" Type="Int32" />
                <asp:Parameter Name="abertura" Type="Int32" />
                <asp:Parameter Name="destaque" Type="Int32" />
                <asp:Parameter Name="oportunidade" Type="Int32" />
            </UpdateParameters>
        </asp:ObjectDataSource>

    segunda-feira, 26 de novembro de 2012 17:55

Respostas

  • Pessoal eu consegui resolver alterando a propriedade do updating do gridview e do objectdatasource com o seguinte codigo:

    Protected Sub odsDados_Updating(sender As Object, e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles odsDados.Updating
            e.InputParameters("abertura") = odsDados.UpdateParameters.Item("abertura").DefaultValue
            e.InputParameters("destaque") = odsDados.UpdateParameters.Item("destaque").DefaultValue
            e.InputParameters("oportunidade") = odsDados.UpdateParameters.Item("oportunidade").DefaultValue
        End Sub
    
    Protected Sub gvDados_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvDados.RowUpdating
            odsDados.UpdateParameters.Item("codigo").DefaultValue = CInt(DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(2).FindControl("Label2a"), Label).Text)
            odsDados.UpdateParameters.Item("abertura").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(5).FindControl("DropDownList1"), DropDownList).SelectedValue
            odsDados.UpdateParameters.Item("destaque").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(7).FindControl("DropDownList3"), DropDownList).SelectedValue
            odsDados.UpdateParameters.Item("oportunidade").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(6).FindControl("DropDownList2"), DropDownList).SelectedValue
        End Sub

    Agora gostaria de saber se isto é o certo mesmo pois me pareceu meio gambiarra.

    Obrigado

    • Marcado como Resposta Joao Nivaldo quinta-feira, 29 de novembro de 2012 14:26
    terça-feira, 27 de novembro de 2012 12:29

Todas as Respostas

  • Cara,

    Mostre o evento no code behind que você faz essa atualização no banco de dados.Se possível a camada de dados que faz a conexão.

    Atencioamente,

    Samuel dos Anjos


    Atenciosamente, Samuel dos Anjos

    segunda-feira, 26 de novembro de 2012 22:20
  • Samuel boa noite,

    olha não tem evento algum simplesmente ele chama a minha funcao atualiza que esta na minha camada de negocios algo bem simples que recebe os 3 parametros e grava. Quando eu faco a depuracao so chega na funcao o codigo os outros parametros vem todos como 0 e nao com o valor q eu escolhi.

    segunda-feira, 26 de novembro de 2012 23:37
  • Pessoal eu consegui resolver alterando a propriedade do updating do gridview e do objectdatasource com o seguinte codigo:

    Protected Sub odsDados_Updating(sender As Object, e As System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs) Handles odsDados.Updating
            e.InputParameters("abertura") = odsDados.UpdateParameters.Item("abertura").DefaultValue
            e.InputParameters("destaque") = odsDados.UpdateParameters.Item("destaque").DefaultValue
            e.InputParameters("oportunidade") = odsDados.UpdateParameters.Item("oportunidade").DefaultValue
        End Sub
    
    Protected Sub gvDados_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvDados.RowUpdating
            odsDados.UpdateParameters.Item("codigo").DefaultValue = CInt(DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(2).FindControl("Label2a"), Label).Text)
            odsDados.UpdateParameters.Item("abertura").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(5).FindControl("DropDownList1"), DropDownList).SelectedValue
            odsDados.UpdateParameters.Item("destaque").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(7).FindControl("DropDownList3"), DropDownList).SelectedValue
            odsDados.UpdateParameters.Item("oportunidade").DefaultValue = DirectCast(DirectCast(sender, GridView).Rows(e.RowIndex).Cells(6).FindControl("DropDownList2"), DropDownList).SelectedValue
        End Sub

    Agora gostaria de saber se isto é o certo mesmo pois me pareceu meio gambiarra.

    Obrigado

    • Marcado como Resposta Joao Nivaldo quinta-feira, 29 de novembro de 2012 14:26
    terça-feira, 27 de novembro de 2012 12:29