Usuário com melhor resposta
Carregar Grid com dados de outro Grid.

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
Respostas
-
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
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.
-
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
-
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.
-
Acho que com esse link você vai conseguir o resultado que espera Marcos.
Abras
-
-
-
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
-
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
- Editado Marcos Paulo P.M segunda-feira, 9 de setembro de 2013 17:17 df
-
-
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
- Editado Marcos Paulo P.M segunda-feira, 9 de setembro de 2013 19:54 tr
-
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.
-
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.
Marcos Paulo - Analista de Sistemas
-
-
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
Marcos Paulo - Analista de Sistemas
-
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