none
Adicionar uma linha na GridView... RRS feed

  • Pergunta

  • Pessoal, mais uma dúvida minha!!!

     

       Eu tenho uma gridview e preciso adicionar uma linha nela. Tem como?

     

       Caso.: Tenho uma lista de registro e quando clico no botão inserir um popup é aberto. Neste popup eu seleciono um outro registro e mando seu Id por parametro para a página que chamou o popup. Após fazer isso preciso que esse registro que selecionei seja incluido na gridview da tela que chamou o popup.

     

     

    Grata,

    Ana

    quarta-feira, 12 de julho de 2006 15:03

Respostas

  • Olá Ana,

    uma maneira para você fazer isso, seria incluir o registro como sendo uma linha de um datatable por exemplo, e setar o datatable para o datasource do gridview.

    Exemplo:

    dim tb as new datatable()
    tb.columns.add("Codigo",gettype(integer))
    tb.columns.add("Descricao",gettype(string))

    dim row as datarow()
    row = tb.newRow()
    row.Item("Codigo") = 1
    row.Item("Descricao") = "Nome do Produto"
    tb.rows.add(row)

     

    GridView.DataSource = tb
    GridView.DataBind()

     

    Espero ter ajudado.

     

    Everton Rodrigues
    Analista de Sistemas
    projenet@gmail.com
    Especialista, Instrutor
    e Palestrante .NET

    quarta-feira, 12 de julho de 2006 16:35

Todas as Respostas

  • Olá Ana,

    uma maneira para você fazer isso, seria incluir o registro como sendo uma linha de um datatable por exemplo, e setar o datatable para o datasource do gridview.

    Exemplo:

    dim tb as new datatable()
    tb.columns.add("Codigo",gettype(integer))
    tb.columns.add("Descricao",gettype(string))

    dim row as datarow()
    row = tb.newRow()
    row.Item("Codigo") = 1
    row.Item("Descricao") = "Nome do Produto"
    tb.rows.add(row)

     

    GridView.DataSource = tb
    GridView.DataBind()

     

    Espero ter ajudado.

     

    Everton Rodrigues
    Analista de Sistemas
    projenet@gmail.com
    Especialista, Instrutor
    e Palestrante .NET

    quarta-feira, 12 de julho de 2006 16:35
  • Olá Everton.

    Estou com este mesmo problema. Uso o mesmo código acima que você mencionou, mas quando gravo os dados no DataTable e apresento no GridView, o mesmo não adiciona uma nova linha, mantendo a anterior e sim, subscreve a última linha.

    Existe alguma configuração a mais para fazer no GridView ?

    Grato,

    Cristiano Joaquim

    terça-feira, 9 de janeiro de 2007 14:01
  • Boa noite,

     

    pessoal estou com o mesmo problema, o qeu fiz aqui foi o sequinte. Eu carrego um DataTable, conforme o nosso colega mostra no exemplo, porém eu garrego este DataTable com os valores que já exite no grid, depois de feito isso eu adciono a minha nova linha e mando ele fazer o Bind novamente, desta forma eu não perco os resgistros que já existian antes de eu inserir a nova linha. Outra alternativa e esta mais leve é criar um objeto de valor, eu carrego um objeto por vez com registro existentes e insiro estes objetos dentro de uma lista. Insiro o novo objeto de valor preenchido e pronto assim eu tenho uma lista completa com as informações que preciso, deste ponto é só eu setar o meu DataSource passando a minha lita de objetos de velores e fazer um Bind( ).

     

     

    quarta-feira, 14 de maio de 2008 21:17
  • Galera,

    O que acontece é que em asp.net toda vez que você faz um PostBack o DataTable perde todas as informacoes.

     

    Vamos fazer o seguinte, crie uma propriedade para sua classe, assim :

    Code Snippet

     

    public DataTable Dados

    {

    get

    {

    if (Session["Dados"] ==null)

    {

    Session["Dados"] = new DataTable();

    }

     

    return (DataTable)Session["Dados"];

    }

    set

    {

    Session["Dados"] = value;

    }

     

    }

     

     

    Depois, no pageLoad Carrege o nosso DataTable com os dados do banco

    Code Snippet

    public void Page_Load(object sender, EventArgs e)

    {

    if (! IsPostBack)

    {

    BuscarNoBancoDeDados(this.Dados);//este método vc cria ai, buscando os dados e jogando no this.Dados

     

    GridView1.DataSource = this.Dados;

    GridView1.DataBind();

    }

    }

     

     

     

    Agora, no evento que será executado quando o usuário clicar em SAlvar na Pop-up, vc coloca o seguinte código

    Code Snippet

    public void ButtonSalvar_Click(object sender, EventArgs e)

    {

    if (Session["Dados"] ==null)

    {

    Session["Dados"] = new DataTable();

    }

     

    DataTable dados =  (DataTable)Session["Dados"];

     

    dados.Rows.Add(.......,.....);// aqui vc coloca os valores dos campos

     

    //aqui vc coloca o código para fechar a pop-up

    }

     

     

    Vc pode implementar de forma diferente,  a idéia aqui é voce entender que tem que guardar os dados em algum lugar entre um postback e outro. Neste exemplo agente guardou na Session.

     

    Espero ter ajudado

     

     

     

     

     

     

    • Sugerido como Resposta marcos alves segunda-feira, 12 de outubro de 2009 13:11
    quinta-feira, 15 de maio de 2008 11:49
  • Bom dia pessoal!


    A solução que a implementação de uma inclusão de uma nova linha no GridView é para que seja possível detalhar um registro, um bom exemplo dessa necessidade é uma lista de pedidos onde vc queira mostrar os detalhes do pedido, ou seja, os items do pedido.

    A única solução que eu consequi que chega mais próximo disso foi implementar da sequinte forma.

    1- Inclui um ItemTemplate column no griv view externo.
    2- Dentro de item template implementa uma tablela conforme o necessita apresentar suas colunas.
    3- faz um collspacing de todas as colunas da linha de cima da tabela.
    4- Nessa nova linha com uma única coluna coloca-se um novo Grid.
    5- Para cada RowItemDataBound fazer um Bind() do grid interno.

    Eu achei uma forma bem mais fácil que esta, porém paga. O Telerik tem uma tag para o seus grid views que se chama MarterTable e com esta tag vc pode ir aninhando um grid dentro do outro. Mas o problema é o preço do componente.
    Se alguém souber de uma forma mais em conta fala que quero saber.

    Vou tentar umplementar um componente que consiga fazer isso, se consequir eu posto o código para o pessoal do comunidade.

    Falou!
    domingo, 11 de outubro de 2009 13:39