none
Asp:Gridview perde colunas criadas dinamicamente no postback RRS feed

  • Pergunta

  • Ola galera, boa tarde!

    Seguinte, estou desenvolvendo uma aplicação .Net, e nela eu tenho um grid que será usada para comparar valores!
    As colunas devem ser adicionadas ao clique de um botão, e poderá ser adicionada quantas colunas o usuário quiser. A primeira coluna eu consigo criar, já a segunda eu não consigo.
    Checando a quantidade de colunas, ele sempre mostra duas (As que estão criadas no ASPX) e não considera as colunas criadas pelo C#

    O Código:

    <div style="width: 100%; border-style: dotted">
        <asp:Button ID="btnNovaOperadora" runat="server" OnClick="btnNovaOperadora_OnClick" Text = "Adicionar nova Operadora"/>
        <div ID="divTitulo" runat="server"> Comparativo de Cotação </div>
    
            <asp:GridView ID="gvComparativoCotacao" runat="server" AutoGenerateColumns="false">
                <Columns>
                <asp:BoundField DataField="ColunaFixa" />
                <asp:BoundField DataField="ColunaPlano" />
                </Columns>
            </asp:GridView>
        </div>

    E esse o código no Clique do botão:

    protected void AdicionaColuna()
            {
                
                    //BoundField bc = new BoundField();
    
                    //gvComparativoCotacao.Columns.Add(bc);
    
    
                int Coluna = 2;// Convert.ToInt16(hIdQtdColunas.Value);
    
                DropDownList ddlOperadora = new DropDownList();
                TextBox txtDesc = new TextBox();
                for (int cells = 0; cells < gvComparativoCotacao.Rows.Count; cells++)
                {
                    TableCell tc = new TableCell();
    
                    gvComparativoCotacao.Rows[cells].Cells.Add(tc);
                }
                gvComparativoCotacao.Rows[0].Cells[Coluna].Controls.Add(ddlOperadora);
                gvComparativoCotacao.Rows[1].Cells[Coluna].Controls.Add(txtDesc);
                
    
                int IDs = 0;
                for (int i = 5; i < gvComparativoCotacao.Rows.Count; i++)
                {
    
                    if (gvComparativoCotacao.Rows[i].Cells[0].Text == "Plano")
                    {
                        DropDownList ddlPlano = new DropDownList();
                        ddlPlano.ID = IDs.ToString();
                        gvComparativoCotacao.Rows[i].Cells[Coluna].Controls.Add(ddlPlano);
                    }
                    if (gvComparativoCotacao.Rows[i].Cells[0].Text == "Acomoda&#231;&#227;o")
                    {
                        TextBox txtAcomodacao = new TextBox();
                        txtAcomodacao.ID = IDs.ToString();
                        gvComparativoCotacao.Rows[i].Cells[Coluna].Controls.Add(txtAcomodacao);
                    }
                    if (gvComparativoCotacao.Rows[i].Cells[0].Text == "Reembolso")
                    {
                        TextBox txtReembolso = new TextBox();
                        txtReembolso.ID = IDs.ToString();
                        gvComparativoCotacao.Rows[i].Cells[Coluna].Controls.Add(txtReembolso);
                    }
                    if (gvComparativoCotacao.Rows[i].Cells[0].Text == "Abrang&#234;ncia")
                    {
                        TextBox txtAbrangencia = new TextBox();
                        txtAbrangencia.ID = IDs.ToString();
                        gvComparativoCotacao.Rows[i].Cells[Coluna].Controls.Add(txtAbrangencia);
                    }
    
    
                    IDs++;
                }
                    
    
            }
    
            protected void btnNovaOperadora_OnClick(object sender, EventArgs e)
            {
                AdicionaColuna();
            }

    Aonde estou errando!?

    Fico no Aguardo!

    terça-feira, 31 de julho de 2012 17:16

Todas as Respostas

  •             for (int cells = 0; cells < gvComparativoCotacao.Rows.Count; cells++)
               
    {
                   
    TableCell tc = new TableCell();

                    gvComparativoCotacao
    .Rows[cells].Cells.Add(tc);
               
    }

    acredito que o seu erro está no add(tc). tente colocar new tablecell() no lugar e veja o que acontece

    terça-feira, 31 de julho de 2012 17:41
  • Continua com o erro: 

    Argumento especificado estava fora do intervalo de valores válidos.
    Nome do parâmetro: index
    terça-feira, 31 de julho de 2012 17:52