none
como acedo ao datasource da minha gridview após evento de um botão? RRS feed

  • Pergunta

  •  

    Olá pessoal,

     

    Estou a desenvolver uma webaplication em C# e estou com o seguinte problema.

     

    Eu tenho uma gridview e quero acrescentar à mesma uma nova linha. Criei um botão (Inserir Linha) e quando o user clica nesse botão o que eu quero é aceder ao dataset da minha view e criar uma nova linha:

     

    Ex:

     

    System.Data.DataSet ds = (System.Data.DataSet)MinhaGridView.DataSource;
    System.Data.DataRow br = ds.Tables[0].NewRow();
    ds.Tables[0].Rows.InsertAt(br, 0);
    MinhaGridView.DataSource = ds.Tables[0];
    MinhaGridView.DataBind();

     

    Só que está a dar o seguinte erro:

    Object reference not set to an instance of an object.

    Description: An unhandled exception occurred during the execution of the current web request. Please

     

    Line 92:              System.Data.DataRow br = ds.Tables[0].NewRow();

     

    Pelo que percebo, quando chego à minha função, a grid está vazia. Como faço para aceder antes de ela estar vazia? Não posso guardar o dataset da mesma numa session porque os utilizadores têm todas as linhas da tabela totalmente editável e por isso não posso ir a bd pois perco informação que possa ser inserida entretanto.

     

    Isto parece-me ser uma coisa simples mas não estou a conseguir dar à volta. Deixo parte do código da minha grid.

     

     <td align="center" colspan="5">
                        <asp:GridView ID="GridViewObjEstrat" runat="server" AutoGenerateColumns="False" 
                            Width="840px" AllowPaging="True"
                            CssClass="Gridview" OnPageIndexChanging="GridViewObjEstrat_SelectedIndexChanging">
                            <Columns>
                                <asp:BoundField DataField="ID" HeaderText="OE" ReadOnly="True" Visible="True" ItemStyle-Width="20px">
                                    <ItemStyle Width="20px"></ItemStyle>
                                </asp:BoundField>
                                <asp:TemplateField HeaderText="Nome">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBoxNome" runat="server" Text='<%# Bind("NOME") %>' Width="400px"
                                            TextMode="MultiLine"></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Descrição"">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBoxDesc" runat="server" Text='<%# Bind("DESCRICAO") %>' Width="400px"
                                            TextMode="MultiLine"></asp:TextBox></ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Contributo %">
                                    <ItemTemplate>
                                        <asp:TextBox ID="TextBoxContributo" runat="server" Text='<%# Bind("CONTRIBUTO") %>'
                                            Width="20px"></asp:TextBox></ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </td>
                </tr>
                <tr>
                    <td>
                    </td>
                    <td align="right">
                        <asp:Button ID="ButtonNovaLinha" runat="server" OnClick="ButtonNovaLinha_Click" Text="Nova Linha"
                            Width="120px" />
                    </td>

     

    Qualquer ajuda é bem vinda Smile

     

    Obrigado

     

    Aga

     


     

    terça-feira, 16 de dezembro de 2008 18:53

Respostas

  • Agamotto,

     

    Não recupere o datasouce do grid. Isso funciona bem em formulários windows mais não funciona na web.

    Te recomendo a: "Armazenar o datasource(dataset) na Session "(Na primeira carga do grid).

    Na hora de adicionar a nova linha. Obtenha da Session do dataset adicione a nova linha exatamente como você fez acima.

    Depois vincule novamente o DataSet ao Grid.datasouce e Execute o DataBind().






    Tiago Santos
    Líder do Grupo de Usuários Atitude Brasil.Net (www.atitudebrasil.net)
    MSP, MCP

    Blog: http://atitudebrasil.net/blogs/tiagosantos/default.aspx


    "Atenção:  Se este poste foi útil. Não deixe de marcar como tal."




    Tiago Novaes (MSP, MCP) tiago.santos@atitudebrasil.net http://www.atitudebrasil.net
    domingo, 20 de setembro de 2009 23:53