none
Carregar Grid com dados de outro Grid. RRS feed

  • Pergunta

  • Bom dia galera,

    To precisando montar um grid da seguinte maneira: monto o primeiro grid com os dados e um checkbox para o usuário selecionar as linhas que ele deseja incluir neste segundo Grid. Após esta seleção, ele clica no botão e um segundo grid será gerado com as linhas selecionadas no grid anterior. Se alguém tiver algum tutorial pra indicar agradeceria muito, pois preciso disso com uma certa urgência, pra ontem pra dizer a verdade.

    Abraços


    Marcos Paulo - Analista de Sistemas

    segunda-feira, 9 de setembro de 2013 11:34

Respostas

Todas as Respostas

  • Fala Marcos. 

    Muito simples. 

    Recupere os dados selecionados e adicione eles em uma segunda lista. 

    Com essa segunda lista você pode efetuar o Bind() da sua grid, e assim por diante. 

    Se você estiver utilizando VO basta instanciar uma nova lista de VO List<SuaVO> lista2 = new List<SuaVO>();

    Faça um for ou um foreach para recuperar os itens selecionados na sua Grid. 

    Dentro desse loop efetue o add na sua lista2: 

    for(int i; i<lista.count; i++)
    {
         // Aqui você pode fazer um IF validando sua linha selecionada
         if(selecionado)
            {
                lista2.add(item selecionado);
    
            }
    }
    
    // aqui você efetua o bind na sua Grid
    gridView.DataSource = lista2;
    gridView.DataBind();

    Se ajudou marque. 

    Existem outras formas, mas essa ao meu ver é a mais simples. 

    Abrass Good Luck.

    segunda-feira, 9 de setembro de 2013 11:47
  • Fala Marcos. 

    Muito simples. 

    Recupere os dados selecionados e adicione eles em uma segunda lista. 

    Com essa segunda lista você pode efetuar o Bind() da sua grid, e assim por diante. 

    Se você estiver utilizando VO basta instanciar uma nova lista de VO List<SuaVO> lista2 = new List<SuaVO>();

    Faça um for ou um foreach para recuperar os itens selecionados na sua Grid. 

    Dentro desse loop efetue o add na sua lista2: 

    for(int i; i<lista.count; i++)
    {
         // Aqui você pode fazer um IF validando sua linha selecionada
         if(selecionado)
            {
                lista2.add(item selecionado);
    
            }
    }
    
    // aqui você efetua o bind na sua Grid
    gridView.DataSource = lista2;
    gridView.DataBind();

    Se ajudou marque. 

    Existem outras formas, mas essa ao meu ver é a mais simples. 

    Abrass Good Luck.

    Bom dia Fernando, obrigado pela ajuda, sou novato em desenvolvimento, preciso de um tutorial mais completo, VO por exemplo fiquei meio perdido sem saber oq é. Quanto a recuperar as linhas selecionadas do grid até tenho uma idéia sim, usario o foreachrow, assim ele percorre linha por linha do grid, mas o problema msm é montar o primeiro Grid com o Checkbox, estou passando problemas aí, to tentando usar este código aki, mas toda vez que tento carregar a página da o seguinte erro; "AccessKey too long, cannot be more than one character. Parameter name: value"

    <asp:GridView ID="grdBuscaDoc" runat="server" AutoGenerateColumns="False" Width="100%"
    PageSize="20" DataKeyNames="DOC_ID" ToolTip="Selecione os documentos recebidos">
    <Columns>
    <asp:TemplateField>
    <HeaderTemplate>
    Documentos Recebidos
    <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
    </HeaderTemplate>
    <ItemTemplate>
    <asp:CheckBox ID="chkDocs" runat="server" OnCheckedChanged="chkDocsOnCheckedChanged"
    AccessKey='<%# Container.DataItemIndex %>' AutoPostBack="true" />
    </ItemTemplate>
    <ItemStyle HorizontalAlign="Center" />
    </asp:TemplateField>
    <asp:TemplateField Visible="false">
    <HeaderStyle Font-Bold="true" HorizontalAlign="center" />
    <ItemStyle HorizontalAlign="center" />
    <HeaderTemplate>
    ID
    </HeaderTemplate>
    <ItemTemplate>
    <asp:Label ID="lblDOC" runat="server" Text='<%#Eval("DOC_ID")%>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <HeaderStyle Font-Bold="true" HorizontalAlign="center" />
    <ItemStyle HorizontalAlign="center" />
    <HeaderTemplate>
    TD
    </HeaderTemplate>
    <ItemTemplate>
    <asp:Label ID="lblTD" runat="server" Text='<%#Eval("TD")%>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
    <HeaderStyle Font-Bold="true" HorizontalAlign="center" />
    <ItemStyle HorizontalAlign="center" />
    <HeaderTemplate>
    Assunto
    </HeaderTemplate>
    <ItemTemplate>
    <asp:Label ID="lblAssunto" runat="server" Text='<%#Eval("BC")%>'>
    </asp:Label></ItemTemplate>
    </asp:TemplateField> </Columns>
    <AlternatingRowStyle BackColor="whitesmoke" />
    <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
    <HeaderStyle BackColor="#003F86" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#003F86" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="White" ForeColor="Black" /><SortedAscendingCellStyle BackColor="#F1F1F1" />
    <SortedAscendingHeaderStyle BackColor="#0000A9" /><SortedDescendingCellStyle BackColor="#CAC9C9" />
    <SortedDescendingHeaderStyle BackColor="#000065" />
    <EmptyDataTemplate>
    Não existe elemento para associar ao grupo.
    </EmptyDataTemplate>
    </asp:GridView>

    este é o código que monta o grid...

    este é o código C# para carregar o Grid

    public partial class incluir_dtlec : System.Web.UI.Page
        {
            public string numDTL;
            public string numDoc;
    
            protected void Page_Load(object sender, EventArgs e)
            {
                atualizaGrid(numDTL, numDoc);
            }
    
            private void atualizaGrid(string numDtl, string numDoc)
            {
    
                numDtl = txtNum_DTLEC.Text;
                numDoc = txtNumDoc.Text;
    
                var bll_edtlec = new BLLDtl();
                var cec = bll_edtlec.ListarDocsIsoSup(numDtl, numDoc);
                grdBuscaDoc.DataSource = cec;
                grdBuscaDoc.DataBind();
            }
    }

    não sei pq fica dando este erro do AccessKey Too Long, já utilizei este mesmo tipo de grid em outro parte do projeto e funcionou perfeitamente, sendo que o campo que utilizo como key é int nos 2 casos.


    Marcos Paulo - Analista de Sistemas

    segunda-feira, 9 de setembro de 2013 12:10
  • Acabei de ver nos meus threads aqui. Eu estava tentando te ajudar com o accessKey. 

    Cara achei onde está seu erro do AccessKey ... 

    // Altere AccessKey='<%# Container.DataItemIndex %>' // Para AccessKey='<%= Container.DataItemIndex %>'

    // Mude também seu Labels

    Conforme visto no link abaixo. 

    http://www.splendidcrm.com/Forums/tabid/66/forumid/13/threadid/3067/scope/posts/Default.aspx

    Quanto a VO se trata de uma camada onde colocamos nossas classe, atributos e propriedades. 

    Mas você já está utilizando uma BLL então sua segunda lista deverá ser uma instancia dessa BLL.

    List<BLLDtl> lista2 = new List<BLLDtl>();

    e seguir os passos que te indiquei. 

    Você deverá percorrer a lista após o clique no botão. 

    Espero ter ajudado. 

    Vou ver se faço ou acho um tutorial completo pra você.

    Abrass Good Luck.

    segunda-feira, 9 de setembro de 2013 12:32
  • http://www.aspsnippets.com/articles/transfer-selected-rows-from-one-gridview-to-another-in-asp.net.aspx

    Acho que com esse link você vai conseguir o resultado que espera Marcos. 

    Abras

    segunda-feira, 9 de setembro de 2013 12:37
  • Como você carrega a sua grid ?

    DataSet, DataTable ou Qualquer tipo de enumeração ?


    Fúlvio Cezar Canducci Dias

    segunda-feira, 9 de setembro de 2013 13:41
  • Como você carrega a sua grid ?

    DataSet, DataTable ou Qualquer tipo de enumeração ?


    Fúlvio Cezar Canducci Dias

    carrego via datatable Fúlvio...

    Marcos Paulo - Analista de Sistemas

    segunda-feira, 9 de setembro de 2013 14:23
  • Marcos ao invés de usar um List como indiquei você deverá gerar um novo DataTable com os itens selecionados na sua grid e utilizar esse novo DataTable para dar um Bind na sua grid secundária. 

    O link que postei o que o cara utiliza é justamente DataTable.

    Abras


    segunda-feira, 9 de setembro de 2013 14:41
  • Acabei de ver nos meus threads aqui. Eu estava tentando te ajudar com o accessKey. 

    Cara achei onde está seu erro do AccessKey ... 

    // Altere AccessKey='<%# Container.DataItemIndex %>' // Para AccessKey='<%= Container.DataItemIndex %>'

    // Mude também seu Labels

    Conforme visto no link abaixo. 

    http://www.splendidcrm.com/Forums/tabid/66/forumid/13/threadid/3067/scope/posts/Default.aspx

    Quanto a VO se trata de uma camada onde colocamos nossas classe, atributos e propriedades. 

    Mas você já está utilizando uma BLL então sua segunda lista deverá ser uma instancia dessa BLL.

    List<BLLDtl> lista2 = new List<BLLDtl>();

    e seguir os passos que te indiquei. 

    Você deverá percorrer a lista após o clique no botão. 

    Espero ter ajudado. 

    Vou ver se faço ou acho um tutorial completo pra você.

    Abrass Good Luck.

    Fala Fernando, fiz a alteração que você flw, mas ainda continua dando o mesmo erro. Antes  o erro acontecia neste trecho do código:

    <asp:CheckBox ID="chkDocs" runat="server" OnCheckedChanged="chkDocsOnCheckedChanged" AccessKey='<%#Container.DataItemIndex%>' AutoPostBack="true" />

    alterando para

    AccessKey='<%=Container.DataItemIndex%>'

    o mesmo erro acontece no Bind do grid:

    grdBuscaDoc.DataBind();

    Alguma outra idéia??

    Abraço


    Marcos Paulo - Analista de Sistemas


    segunda-feira, 9 de setembro de 2013 17:16
  • Temos uma evolução pois o erro mudou de lugar rsrs

    Brincadeiras a parte, a mensagem que ele da na exception do Bind é a mesma?

    Posta pra nós por favor Marcos. 

    segunda-feira, 9 de setembro de 2013 17:41
  • Temos uma evolução pois o erro mudou de lugar rsrs

    Brincadeiras a parte, a mensagem que ele da na exception do Bind é a mesma?

    Posta pra nós por favor Marcos. 

    É o mesmo erro sim Fernando, o fdp só mudou de lugar, mas continua me perseguindo huhuhuuhuuhu

    ocorria aqui:

    mudou o lugar, mas continua o mesmo tipo de erro. utilizo este código em outro grid e funciona legal, não sei porque aqui está dando erro.

    agora está aqui:


    Marcos Paulo - Analista de Sistemas


    segunda-feira, 9 de setembro de 2013 19:51
  • Marcos creio que o erro esta se dando porque você vai bindar o DataItemIndex sem que a grid ainda tenha sido gerada.

    Cara muito estranho dar esse erro se você está utilizando em outra grid desse mesmo jeitinho. Vi alguns posts dizendo que o tamanho do item não corresponde com o tamanho aceito pelo accessKey, o que acho que não é o seu caso. Você já tentou definir esse accessKey no RowDataBound da sua Grid? Cara se funciona em uma grid era pra funcionar nessa também, alguma coisa deve estar diferente entre as duas. Se nao for pedir muito e você quiser postar ambos códigos para eu te ajudar a olhar.

    Abraço. 

    segunda-feira, 9 de setembro de 2013 20:16
  • Marcos creio que o erro esta se dando porque você vai bindar o DataItemIndex sem que a grid ainda tenha sido gerada.

    Cara muito estranho dar esse erro se você está utilizando em outra grid desse mesmo jeitinho. Vi alguns posts dizendo que o tamanho do item não corresponde com o tamanho aceito pelo accessKey, o que acho que não é o seu caso. Você já tentou definir esse accessKey no RowDataBound da sua Grid? Cara se funciona em uma grid era pra funcionar nessa também, alguma coisa deve estar diferente entre as duas. Se nao for pedir muito e você quiser postar ambos códigos para eu te ajudar a olhar.

    Abraço. 

    fala fernando, a net aqui da empresa caiu e só voltou agora. Posso postar sim, mas você prefere aqui ou que eu te passe por email? se for por email pode anotar o meu que te mando os códigos. marcospaulo.mppm@gmail.com; marcppm.arcadis@eletronuclear.gov.br

    Marcos Paulo - Analista de Sistemas

    terça-feira, 10 de setembro de 2013 17:02
  • Eu te mandei um email cara. 

    fhmamprin@gmail.com

    Manda la .. que eu vou ver o que consigo.

    Ai se conseguir a solução posto a resposta aqui OK. 

    Abraço. 

    terça-feira, 10 de setembro de 2013 17:07
  • Marcos creio que o erro esta se dando porque você vai bindar o DataItemIndex sem que a grid ainda tenha sido gerada.

    Cara muito estranho dar esse erro se você está utilizando em outra grid desse mesmo jeitinho. Vi alguns posts dizendo que o tamanho do item não corresponde com o tamanho aceito pelo accessKey, o que acho que não é o seu caso. Você já tentou definir esse accessKey no RowDataBound da sua Grid? Cara se funciona em uma grid era pra funcionar nessa também, alguma coisa deve estar diferente entre as duas. Se nao for pedir muito e você quiser postar ambos códigos para eu te ajudar a olhar.

    Abraço. 

    fala fernando, a net aqui da empresa caiu e só voltou agora. Posso postar sim, mas você prefere aqui ou que eu te passe por email? se for por email pode anotar o meu que te mando os códigos. marcospaulo.mppm@gmail.com; marcppm.arcadis@eletronuclear.gov.br

    Marcos Paulo - Analista de Sistemas

    como eu poderia definir o AccessKey no RowDataBound ???

    Marcos Paulo - Analista de Sistemas

    terça-feira, 10 de setembro de 2013 17:14
  • Você deverá recuperar a propriedade do checkBox e adicionar o accesKey. 

    Eu vou dar uma olhada la pra você cara. 

    • Marcado como Resposta Marcos Paulo P.M quarta-feira, 1 de outubro de 2014 13:41
    terça-feira, 10 de setembro de 2013 18:52