Gridview com Detalhes
Olá
Estou trabalhando com um sistema e neste possuo uma tabela,,...... por exemplo...... Clientes e Pedidos,
Gostaria de Lista os Clientes em uma gridview e dentro de cada linha / Registro inserir uma Grid com Detalhen de Pedido de cada Cliente.
Consegui resolver isto sem problemas, mas gostaria de um exemplo melhor como por exemplo um botão em que cria-se um efeito parecido com o accordion do Ajax,
por exemplo um sinal de "+" ( que pode ser uma figura ) quando clico a linha aumenta e mostra os pedidos de cada cliente
ESPERO TER SIDO CLARO,
Grato
Estou trabalhando com um sistema e neste possuo uma tabela,,...... por exemplo...... Clientes e Pedidos,
Gostaria de Lista os Clientes em uma gridview e dentro de cada linha / Registro inserir uma Grid com Detalhen de Pedido de cada Cliente.
Consegui resolver isto sem problemas, mas gostaria de um exemplo melhor como por exemplo um botão em que cria-se um efeito parecido com o accordion do Ajax,
por exemplo um sinal de "+" ( que pode ser uma figura ) quando clico a linha aumenta e mostra os pedidos de cada cliente
ESPERO TER SIDO CLARO,
Grato
Fernando Reis
Curtidas 0
Respostas
Luiz Maia
05/01/2010
Ola Fernando,
Por favor, de uma olhada neste artigo que escrevi que tem a mesma funcionalidade:
https://www.devmedia.com.br/articles/viewcomp.asp?comp=13234
Neste artigo eu explico como editar os itens, no seu caso vc tera que alterar para listar os subitens, e alterar o label EDITAR da gridview para a imagem com o "+", ok?
Veja se isto vai ajudar, e caso não tenha acesso gratuito ao artigo me diga que providencio para vc, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
Fernando Reis
05/01/2010
Perfeito,
Resolve o problema,
Estava estudando e cheguei a umaopção interessante também, trata-se do Accordion com um gridview dentro dele,
só estou em dívida como pegar o CODIGO PRINCIPAL para popular o gridview ...... pode me ajudar???
Veja o código:
<cc1:Accordion ID="Accordion1" runat="server"
HeaderCssClass="Accordion_Header"
ContentCssClass="Accordion_Conteudo"
FadeTransitions="true"
DataSourceID="dsEmpresaSystemas"
>
<HeaderTemplate>
Sistema : <%# Eval("NOMESISTEM_TORRE") %>
</HeaderTemplate>
<ContentTemplate>
Modelo : <%# Eval("MODELO_TORRE") %><br />
Marca : <%# Eval("MARCA_TORRE") %><br />
</ContentTemplate>
<Panes>
</Panes>
</cc1:Accordion>
<br />
<asp:SqlDataSource ID="dsEmpresaSystemas" runat="server" ConnectionString="<%$ ConnectionStrings:csAquaplan %>"
SelectCommand="SELECT TBL_EMPRESA.NOME_EMP, TBL_TORRE.NOMESISTEM_TORRE, TBL_TORRE.MODELO_TORRE, TBL_TORRE.MARCA_TORRE,TBL_TORRE.CODIGO_SIS,TBL_TORRE.VOLUME_TORRE, TBL_EMPRESA.CODIGO_EMP FROM TBL_EMPRESA INNER JOIN TBL_TORRE ON TBL_EMPRESA.CODIGO_EMP = TBL_TORRE.CODIGO_EMP WHERE (TBL_EMPRESA.CODIGO_EMP = @CODIGO_EMP)">
<SelectParameters>
<asp:ControlParameter ControlID="txtCodigo" Name="CODIGO_EMP" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
Dentro do ContentTemplate quero adcionar um gridview que deverá receber o campo <%#Eval("CODIGO")>
Sei que tenho que usar o ROWDataBound, mas como recuperar o registro acima??????
Grato pela ajuda
Resolve o problema,
Estava estudando e cheguei a umaopção interessante também, trata-se do Accordion com um gridview dentro dele,
só estou em dívida como pegar o CODIGO PRINCIPAL para popular o gridview ...... pode me ajudar???
Veja o código:
<cc1:Accordion ID="Accordion1" runat="server"
HeaderCssClass="Accordion_Header"
ContentCssClass="Accordion_Conteudo"
FadeTransitions="true"
DataSourceID="dsEmpresaSystemas"
>
<HeaderTemplate>
Sistema : <%# Eval("NOMESISTEM_TORRE") %>
</HeaderTemplate>
<ContentTemplate>
Modelo : <%# Eval("MODELO_TORRE") %><br />
Marca : <%# Eval("MARCA_TORRE") %><br />
</ContentTemplate>
<Panes>
</Panes>
</cc1:Accordion>
<br />
<asp:SqlDataSource ID="dsEmpresaSystemas" runat="server" ConnectionString="<%$ ConnectionStrings:csAquaplan %>"
SelectCommand="SELECT TBL_EMPRESA.NOME_EMP, TBL_TORRE.NOMESISTEM_TORRE, TBL_TORRE.MODELO_TORRE, TBL_TORRE.MARCA_TORRE,TBL_TORRE.CODIGO_SIS,TBL_TORRE.VOLUME_TORRE, TBL_EMPRESA.CODIGO_EMP FROM TBL_EMPRESA INNER JOIN TBL_TORRE ON TBL_EMPRESA.CODIGO_EMP = TBL_TORRE.CODIGO_EMP WHERE (TBL_EMPRESA.CODIGO_EMP = @CODIGO_EMP)">
<SelectParameters>
<asp:ControlParameter ControlID="txtCodigo" Name="CODIGO_EMP" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>
Dentro do ContentTemplate quero adcionar um gridview que deverá receber o campo <%#Eval("CODIGO")>
Sei que tenho que usar o ROWDataBound, mas como recuperar o registro acima??????
Grato pela ajuda
GOSTEI 0
Fernando Reis
05/01/2010
Luiz,
Veja a reposta que eu precisava,,
funcionou bacaninha,
vou usar seu exemplo em outra p[agina
GRATO
Veja a reposta que eu precisava,,
funcionou bacaninha,
vou usar seu exemplo em outra p[agina
GRATO
GOSTEI 0
Luiz Maia
05/01/2010
Fernando,
Como você optou por outra solução, vou cancelar seu chamado, assim não perde os créditos, ok?
Abraços e até mais....
Att
Luiz Maia
GOSTEI 0
Fernando Reis
05/01/2010
Luiz,
Voltando a este assunto, gostaria de Saber!
Veja o modelo que usei de Código
HTML :Default.aspx
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<cc1:Accordion ID="Accordion1" runat="server" HeaderCssClass="Accordion_Header" ContentCssClass="Accordion_Conteudo"
FadeTransitions="true" DataSourceID="dsCustomer" OnItemDataBound="Accordion1_ItemDataBound">
<HeaderTemplate>
<%# Eval("CompanyName")%>
</HeaderTemplate>
<ContentTemplate>
<asp:HiddenField ID="hdfCodigo" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"CustomerID") %>' />
<%# Eval("ContactName")%>
<br />
<asp:GridView ID="gvOrder" runat="server">
</asp:GridView>
</ContentTemplate>
<Panes>
</Panes>
</cc1:Accordion>
<asp:SqlDataSource ID="dsCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:csNorth %>"
SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName] FROM [Customers] ORDER BY [CompanyName]">
</asp:SqlDataSource>
<br />
</div>
Code: Default.aspx.cs
protected void Accordion1_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e)
{
if (e.ItemType == AjaxControlToolkit.AccordionItemType.Content)
{
SqlConnection sqlConn = new SqlConnection(conString);
sqlConn.Open();
string strsql = "";
strsql += "SELECT Orders.OrderID, Customers.CompanyName, Orders.OrderDate, Orders.CustomerID";
strsql += " FROM Customers INNER JOIN ";
strsql += " Orders ON Customers.CustomerID = Orders.CustomerID ";
strsql += " WHERE (Orders.CustomerID = '" + ((HiddenField)e.AccordionItem.FindControl("hdfCodigo")).Value.ToString() + "')";
SqlCommand sqlSelect = new SqlCommand(strsql, sqlConn);
sqlSelect.CommandType = System.Data.CommandType.Text;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlSelect);
DataSet myDataset = new DataSet();
sqlAdapter.Fill(myDataset);
sqlConn.Close();
GridView grd = new GridView();
grd = (GridView)e.AccordionItem.FindControl("gvOrder");
grd.DataSource = myDataset;
grd.DataBind();
}
}
Ou seja :
Crio uma conexão com o Banco NorthWind.
Busco a Tabela CUSTOMER e Crio o Accordion.
Enquanto o Accordion esta sendo Criado, busco o gridView e Populo com informação referente aquele Grid.
minha pergunta é:
como faço para implementar um método "Excluir" para cada linha do GridView?
Abraços
Voltando a este assunto, gostaria de Saber!
Veja o modelo que usei de Código
HTML :Default.aspx
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<cc1:Accordion ID="Accordion1" runat="server" HeaderCssClass="Accordion_Header" ContentCssClass="Accordion_Conteudo"
FadeTransitions="true" DataSourceID="dsCustomer" OnItemDataBound="Accordion1_ItemDataBound">
<HeaderTemplate>
<%# Eval("CompanyName")%>
</HeaderTemplate>
<ContentTemplate>
<asp:HiddenField ID="hdfCodigo" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"CustomerID") %>' />
<%# Eval("ContactName")%>
<br />
<asp:GridView ID="gvOrder" runat="server">
</asp:GridView>
</ContentTemplate>
<Panes>
</Panes>
</cc1:Accordion>
<asp:SqlDataSource ID="dsCustomer" runat="server" ConnectionString="<%$ ConnectionStrings:csNorth %>"
SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName] FROM [Customers] ORDER BY [CompanyName]">
</asp:SqlDataSource>
<br />
</div>
Code: Default.aspx.cs
protected void Accordion1_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e)
{
if (e.ItemType == AjaxControlToolkit.AccordionItemType.Content)
{
SqlConnection sqlConn = new SqlConnection(conString);
sqlConn.Open();
string strsql = "";
strsql += "SELECT Orders.OrderID, Customers.CompanyName, Orders.OrderDate, Orders.CustomerID";
strsql += " FROM Customers INNER JOIN ";
strsql += " Orders ON Customers.CustomerID = Orders.CustomerID ";
strsql += " WHERE (Orders.CustomerID = '" + ((HiddenField)e.AccordionItem.FindControl("hdfCodigo")).Value.ToString() + "')";
SqlCommand sqlSelect = new SqlCommand(strsql, sqlConn);
sqlSelect.CommandType = System.Data.CommandType.Text;
SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlSelect);
DataSet myDataset = new DataSet();
sqlAdapter.Fill(myDataset);
sqlConn.Close();
GridView grd = new GridView();
grd = (GridView)e.AccordionItem.FindControl("gvOrder");
grd.DataSource = myDataset;
grd.DataBind();
}
}
Ou seja :
Crio uma conexão com o Banco NorthWind.
Busco a Tabela CUSTOMER e Crio o Accordion.
Enquanto o Accordion esta sendo Criado, busco o gridView e Populo com informação referente aquele Grid.
minha pergunta é:
como faço para implementar um método "Excluir" para cada linha do GridView?
Abraços
GOSTEI 0
Luiz Maia
05/01/2010
Usando os recursos o Ajax, ou pode ser sem o Accordion mesmo?
Aguardo
Att
Luiz Maia
GOSTEI 0
Fernando Reis
05/01/2010
Teria que ser dentro do Accordion!
:0)
:0)
GOSTEI 0
Luiz Maia
05/01/2010
Fernando,
na verdade o Accordion não tem nada haver com a Grid não.
A grid esta dentro de seu Accordion, correto?
GOSTEI 0
Fernando Reis
05/01/2010
Correto,
Grid esta dentro do Accordion
GOSTEI 0
Luiz Maia
05/01/2010
Fernando,
Faça o sistema de exclsão habitual mesmo, usando um templatefiled com um imageButton dentro dele.
Acho que ja te passei um projeto exemplificando isto, caso contrario, me informe que te passo novamente, ok?
Aguardo
Att
Luiz Maia
GOSTEI 0
Fernando Reis
05/01/2010
Acabei de encontrar o Post que comentou abaixo,
Vou testar,
Aviso em breve
.
Ps. recebeu meu e-mail em resposta ao seu (sobre as vídeo aulas)?
Vou testar,
Aviso em breve
.
Ps. recebeu meu e-mail em resposta ao seu (sobre as vídeo aulas)?
GOSTEI 0
Luiz Maia
05/01/2010
Fico no aguardo...
Abraços
Att
Luiz Maia
GOSTEI 0
Fernando Reis
05/01/2010
recebeu meu e-mail em resposta ao seu (sobre as vídeo aulas)?
GOSTEI 0
Fernando Reis
05/01/2010
bacaninha.
resolvido, com o exemplo anterior
Obrigado
resolvido, com o exemplo anterior
Obrigado
GOSTEI 0