Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Flavio Uccela

GridView (pageing) com DropDownList

Recommended Posts

Alguém já passou por esse problema?

 

Quando o gridview tem mais do que uma página, ao mudar de página todos os registros do dropdownlist somem. Na primeira página ele vem populado da maneira correta. O sqldatasource está em branco mas deve estar sendo usado como um data set (eu peguei isso ontem para arrumar e não tive tempo de pesquisar a fundo). Vocês sabem se quando eu mudo a página preciso dar bind NOS DropDownList?

 

Segue imagens e códigos para melhor entendimento.

 

Imagem Postada

 

Imagem Postada

 

Aspx

<asp:GridView ID="Gdproduto" runat="server" SkinID="GridViewHeader"
   DataKeyNames="cdproduto"
   AutoGenerateColumns="False" 
   onpageindexchanging="Gdproduto_PageIndexChanging" 
   onrowcommand="Gdproduto_RowCommand"
   AllowPaging="True" 
   PageSize="20" ShowFooter="True" 
   onrowcreated="Gdproduto_RowCreated"> 

<asp:TemplateField HeaderText="Condição" >
   <ItemTemplate>
      <asp:DropDownList ID="dltidcondicao" runat="server" 
           DataSourceID="SqlDataSource2" 
           DataTextField="NMCONDICAO" 
           DataValueField="IDCONDICAO" 
           AutoPostBack="True" EnableTheming="True">
      </asp:DropDownList>
   </ItemTemplate>
</asp:TemplateField>

<asp:SqlDataSource ID="SqlDataSource2" runat="server"/>

C#

private void GridProduto(string idcotacao,string cdfornecedor)
{
   cotacao = new cot_cotacao();
   DataSet ds = new DataSet();
   string sql = "SELECT * FROM VW_ProdutoPreco WHERE idcotacao = ? and cdfornecedor=? order by nomeproduto";
   object[] o ={ idcotacao,cdfornecedor };
   ds = cotacao.ExecuteDataSet(sql,o);
   this.Gdproduto.DataSource = ds.Tables[0].DefaultView;
   this.Gdproduto.DataBind();
}

protected void Gdproduto_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
   string lblidcotacao = "";
   string lblcdfornecedor = "";
   foreach (GridViewRow row in Gdproduto.Rows)
   {
      int i = row.RowIndex;
      GridViewRow gvrproduto = Gdproduto.Rows[i];
      lblidcotacao = ((Label)gvrproduto.FindControl("lblidcotacao1")).Text;
      lblcdfornecedor = ((Label)gvrproduto.FindControl("lblcdfornecedor1")).Text;
   }
   Gdproduto.PageIndex = e.NewPageIndex;
   GridProduto(lblidcotacao, lblcdfornecedor);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltava popular cada vez que houvesse a mudança de página.

Segue código:

SqlDataSource2.ConnectionString = ConfigurationManager.AppSettings.Get("DB.ConnectionString");
SqlDataSource2.ProviderName = ConfigurationManager.AppSettings.Get("Provider.App");
SqlDataSource2.SelectCommand = "Select bla bla bla";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Flávio,

 

Popular o Dropdown toda vez que é processado a pagina esta correto, mas não há necessidade de consultar a base de dados todas as vezes que se processa a página.

 

Caso os dados do Dropdown sejam os mesmos para todos os regitros é possivel guarda-los na Session ou na ViewState. Desta forma, você minimiza os acessos á base de dados.

 

Espero te-lo ajudado, ;)

 

Angelo Compri

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.