none
GridView Dinamicamente com Edit C# ASP NET RRS feed

  • Pergunta

  • Galera, boa dia!

    Estou com um problema aqui. Estou montando um aplicação que há um cadastro de Assuntos, SubAssuntos e Documentos. O problema começa quando tenho preciso fazer esse cadastro em uma única tela.

    Vou explicar melhor.

    Um tela normal com um input e um bota "add". Abaixo um gridView exibindo as assuntos cadastrados. com botao EDIT e Excluir.OK até então.

    Procedimentos:

    A pessoa digita o Assunto nesse input e clica em cadastrar. Em seguida esse assunto é exibido nesse gridview abaixo.ok.

    o problema comeca agora. Eu preciso que quando a pessa clica em cima do assunto, abra um sub item..esse subitem seria os subassuntos cadastrados para esse assunto.. Ou seja um gridView dentro do outro. Isso eu consegui fazer. Eu crio esse segundo gridview via codigo, dinamicamento. Se fosse so exibir os subassuntos dentro de assuntos, tava ok.. o problema esta sendo porque eu preciso que nesse segundo gridview, o de subassuntos, tb tenha a possibilidade de editar excluir e incluir um novo subassunto. eu consegui até mostrar os botoes editar, e excluir..mas nao consigo fazer q ao clicar em editar por exemplo, ele deixe o subassunto referente editavel..Deu pra intender? como se fosse uma arvore de nives..o primeiro nivel q é assunto eu consegui fazer tudo..alter e excluo, agora o segundo nível complicou..e sem falar q ainda tere q implementar o 3 nivel...kkk

    observacao: Assunto eu tenho Codigo e Nome e so mostra Nome. Subassunto eu tenho Codigo, Nome e codAssunto, mas no grid so mostra o Nome...

    Alguem pode me ajudar? se acharem melhor eu posto os codigos para darem uma olhada..ou se tiverem um exemplo ai..vlw

     

    Wallyson

    sexta-feira, 28 de maio de 2010 12:53

Respostas

  • Sim. Nessas horas, existe uma magia negra chamada recursividade.

    Cria o método:

    Public Function FindControlRecursivo(ByVal root As Control, ByVal id As String) As Control
    
     If root.ID = id Then
    
      Return (root)
    
     End If
    
    
    
     For Each c As Control In root.Controls
    
      Dim t As Control = FindControlRecursivo(c, id)
    
      If t IsNot Nothing Then
    
      Return (t)
    
      End If
    
     Next
    
     Return (Nothing)
    
     End Function
    
    
    
    

    E chama ele assim:

    Dim dtgrid As DataGrid = FindControlRecursivo(Me.Page, "dgSubAssuntos")
    
    
    
    


    Isso encontra até seu cachorro morto atrás da porta.

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633


    Realmente..encontrou mesmo. Só que...kkk
    bom..Eu não precisava ter o objeto, simplesmente achar ele e mudar um atributo. Entao ao inves de retorno o objeto na funcao, eu alterei a propiedade que preciso.
    Só que como ele procura o objeto com akele ID ele sempre vai achar o primeiro gridFilho..
    Por exemplo:

    Se eu clicar em editar no primeiro gridfilho ele referencia a ele mesmo,ok! porque ele é o primeiro..se eu clicar no segundo gridFilho ou 3 ou o ultimo la em baixo..ele sempre referencia o primeiro la em cima....
    Que problema que estou..afff..

    • Marcado como Resposta Wallyson Keller quinta-feira, 25 de agosto de 2011 02:49
    terça-feira, 1 de junho de 2010 13:15

Todas as Respostas

  • Cara, é meio complexto explicar por texto, mas o que você precisa fazer é controlar as subgrids e construí-las no evento RowDataBound/ItemDataBound. Ou seja, o pai, a cada linha, contrói a do filho e asssim sucessivamente.

    Atentando-se para cada nome dos botões para você não se perder nos find control para saber o quando editar.

    Para cada linha da grid, sempre envie o código pai e depois oculte (para você semrpe ter a linha de referencia.

    Já fiz grades desse tipo mas não tenho comigo agora exemplos.


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 13:08
  • Cara, é meio complexto explicar por texto, mas o que você precisa fazer é controlar as subgrids e construí-las no evento RowDataBound/ItemDataBound. Ou seja, o pai, a cada linha, contrói a do filho e asssim sucessivamente.

    Atentando-se para cada nome dos botões para você não se perder nos find control para saber o quando editar.

    Para cada linha da grid, sempre envie o código pai e depois oculte (para você semrpe ter a linha de referencia.

    Já fiz grades desse tipo mas não tenho comigo agora exemplos.


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633

    Eu criei o metodo "gvAssuntos_RowDataBound"..nesse método eu consigo criar o segundo grid..Eu não consigo é fazer os botoes editar excluir e remover desse segundo grid funcionar..no editar por exemplo, preciso tornar esse subassunto em questao editavel...Tenho o CommandField com editar, excluir e incluir...Criei esse CommandFiel, só que não sei como criar e atribuir os eventos...
    • Editado Wallyson Keller sexta-feira, 28 de maio de 2010 13:28 erro portugues
    sexta-feira, 28 de maio de 2010 13:17
  • Você deve criar essas colunas do tipo Template, para associar comandos a cada uma e controlar pelo evento RowCommnad.

    Já fez isso alguma vez?

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 13:35
  • Você deve criar essas colunas do tipo Template, para associar comandos a cada uma e controlar pelo evento RowCommnad.

    Já fez isso alguma vez?

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633


    Eu fiz isso no grid pai. pois eu precisava clicar em um campo e executar o evento para mostrar o grid filho. Só que eu fiz isso com um grid que foi criado fixo. Fui la em editar colunas, transformei em template e associei ao evento para exibir meu grid filho..Inclusive habilitei o editar e excluir do grid pai e quando clico em editar ele ja transforma o campo para editavel automaticamente..RSRS. Isso o grid pai, que foi criado inicialmente, fixo..Foi tranquilo....

    Mas acredito que eu consigo criar esse template manualmente, via codigo e tal..mas esse commandField eu deleto? eu crio o templateColumns..Ai dentro eu coloco o botao editar por exemplo..assossio ao metodo..mas qual metodo? o q o metodo vai fazer?..desculpa...estou meio cru mesmo...se vc achar mais facil...eu mando meu codigo que eh executado no RowDataBound do grid pai, sei la...to precisando muito dessa parada. Estou em meu primeiro projeto na empresa, e meu prazo ta terminando...e isso ai ta me agarrando....

     

    vlw

    sexta-feira, 28 de maio de 2010 14:13
  • BOm, primeiro você tem que entender como criar as colunas do tipo Template dinamicamente.

    Veja: http://www.codeproject.com/KB/aspnet/DataGrid_Template_columns.aspx se estiver usando DataGrid ou;
    Veja: http://www.codeproject.com/KB/aspnet/create_template_columns.aspx se estiver usando GridView
    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 14:17
  • BOm, primeiro você tem que entender como criar as colunas do tipo Template dinamicamente.

    Veja: http://www.codeproject.com/KB/aspnet/DataGrid_Template_columns.aspx se estiver usando DataGrid ou;
    Veja: http://www.codeproject.com/KB/aspnet/create_template_columns.aspx se estiver usando GridView
    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633

    OK, deu uma lida e ja implementei uma coluna do tipo Template no meu grid...o que éh preciso fazer agora?
    sexta-feira, 28 de maio de 2010 16:26
  • Agora, dentro do Template Field criado, você coloca um TextBox para você usar de gancho para saber quem é o pai. E lá no rowdatabound do pai, você além de criar a grid, você popula com o respectivo código.

    E assim com as outras colunas, criando uma a uma.

    E como vai precisar expandir de novo, você adiciona nesse Template o evento do button (lá no RowCommand da grid de dentro).
    E esse botão repete a mesma rotina do pai, para fazer o filho dentro do filho.

    Acho que ficou confuso, não?
    Sem desenha ficar triste.

    MSDN devia implementar um Paint aqui.


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 16:40
  • Agora, dentro do Template Field criado, você coloca um TextBox para você usar de gancho para saber quem é o pai. E lá no rowdatabound do pai, você além de criar a grid, você popula com o respectivo código.

    E assim com as outras colunas, criando uma a uma.

    E como vai precisar expandir de novo, você adiciona nesse Template o evento do button (lá no RowCommand da grid de dentro).
    E esse botão repete a mesma rotina do pai, para fazer o filho dentro do filho.

    Acho que ficou confuso, não?
    Sem desenha ficar triste.

    MSDN devia implementar um Paint aqui.


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633

    Eu entendi até o "E assim com as outras colunas, criando uma a uma.
    "..rsrs...

    Olha só. EU ja tenho implementado o primeiro filho com os botões EDITAR/EXCLUIR do tipo CommandField... é realmente necessário implementar por template? sei que é chato ficar lendo codigo, mas segue abaixo o metodo "RowDataBound" do gridPai..esse ja monta o filho com seus CommandField implementados, mas sem eventos...

    protected

     

    void gvAssuntos_RowDataBound(object sender, GridViewRowEventArgs e)

    {

     

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

     

    //Essa minha classe de negcio. Tem o encapsulamento e tals

     

    //dos atributos..Codigo,Nome e AssuntoPai(CodAssunto)

     

    AssuntoBLL assuntoBLL = (AssuntoBLL)(e.Row.DataItem);

     

    if (ItensAbertos.IndexOf(assuntoBLL.Codigo.ToString()) != -1)

    {

     

    HtmlGenericControl gen = new HtmlGenericControl();

     

     

    //meu objectDataSource recebe o parametro codigo,

     

    //que o codigo do assunto q esse subAssunto ta vinculado

    odsSubAssuntos.SelectParameters[

    "Codigo"].DefaultValue = assuntoBLL.Codigo.ToString();

     

    GridView gvSubAssuntos = new GridView();

    gvSubAssuntos.RowHeaderColumn =

    "Codigo";

    gvSubAssuntos.ShowHeader =

    false;

    gvSubAssuntos.DataKeyNames =

    new string[] { "Codigo" };

    gvSubAssuntos.GridLines =

    GridLines.None;

     

     

    //Codigo SubAssunto

     

    BoundField bfCodigo = new BoundField();

    bfCodigo.DataField =

    "Codigo";

    bfCodigo.HeaderText =

    "Codigo";

    bfCodigo.Visible =

    false;

    bfCodigo.SortExpression =

    "Codigo";

    bfCodigo.ReadOnly =

    true;

     

    //Nome SubAssunto

     

    BoundField bfNome = new BoundField();

    bfNome.DataField =

    "Nome";

    bfNome.HeaderText =

    "Nome";

    bfNome.Visible =

    true;

    bfNome.SortExpression =

    "Nome";

    bfNome.ReadOnly =

    false;

     

    //Codigo do Assunto Pai

     

    BoundField bfAssuntoPai = new BoundField();

    bfAssuntoPai.DataField =

    "AssuntoPai";

    bfAssuntoPai.HeaderText =

    "AssuntoPai";

    bfAssuntoPai.Visible =

    false;

    bfAssuntoPai.SortExpression =

    "AssuntoPai";

    bfAssuntoPai.ReadOnly =

    true;

     

     

    //Editar/Excluir

     

    CommandField cmdf = new CommandField();

    cmdf.ButtonType =

    ButtonType.Image;

    cmdf.CancelImageUrl =

    "~/Media/Images/bt_cancelar.gif";

    cmdf.CancelText =

    "Cancelar";

    cmdf.DeleteImageUrl =

    "~/Media/Images/ico_ativa0.gif";

    cmdf.DeleteText =

    "Excluir";

    cmdf.EditImageUrl =

    "~/Media/Images/ico_editar2.gif";

    cmdf.EditText =

    "Editar";

    cmdf.InsertVisible =

    true;

    cmdf.ShowDeleteButton =

    true;

    cmdf.ShowEditButton =

    true;

    cmdf.UpdateImageUrl =

    "~/Media/Images/bt_salvar.gif";

    cmdf.UpdateText =

    "Salvar";

    gvSubAssuntos.Columns.Clear();

    gvSubAssuntos.Columns.Add(bfCodigo);

    gvSubAssuntos.Columns.Add(bfNome);

    gvSubAssuntos.Columns.Add(bfAssuntoPai);

    gvSubAssuntos.Columns.Add(cmdf);

    gvSubAssuntos.CssClass =

    "grdSubAssunto";

    gvSubAssuntos.Width =

    new Unit(185, UnitType.Percentage);

    gvSubAssuntos.AutoGenerateColumns =

    false;

    gen.InnerHtml = e.Row.Cells[1].Text +

    "<br/>";

    e.Row.Cells[1].Controls.Add(gen);

    gvSubAssuntos.DataSource = odsSubAssuntos;

    gvSubAssuntos.DataBind();

    e.Row.Cells[1].Controls.Add(gvSubAssuntos);

    }

    }

    }

    vlw
     

    sexta-feira, 28 de maio de 2010 17:24
  • FIcou muito desorganizado..acho q nao vai intender nada..se for o caso te mando por email para vc da uma olhada outra hora...vlw novamente..
    sexta-feira, 28 de maio de 2010 17:27
  • Pera ai..
    Quantos níveis vão ser?

    "N" níveis?
    Porque se for fixo, há a possibilidade de você já deixar as grids prontas, bastando popular?

    Fica mais fácil de te explicar por aqui se for dessa maneira.

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 17:33
  • Pera ai..
    Quantos níveis vão ser?

    "N" níveis?
    Porque se for fixo, há a possibilidade de você já deixar as grids prontas, bastando popular?

    Fica mais fácil de te explicar por aqui se for dessa maneira.

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633

    Somente 3 níves. Não mais...
    sexta-feira, 28 de maio de 2010 17:42
  • Espero que ajude e que você consiga aplicar a sua situação:

    1 - Código ASPX:
    <%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>Untitled Page</title>
      <script type="text/javascript" >
      function MostraDiv(Obj)
      {
        if(Obj.style.display == 'none')
        {
          Obj.style.display = 'block';
        }else
        {
          Obj.style.display = 'none';
        }
      }
      </script>
    </head>
    <body>
      <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
          <asp:ImageButton ID="btBuscar" runat="server" ImageUrl="~/DefaultImg/Search.gif" /><br />
          <br />
          <asp:DataGrid ID="grid_Principal" runat="server" AutoGenerateColumns="False" CellSpacing="3"
            CssClass="gridDefaut" EnableViewState="false" GridLines="None" ShowHeader="False">
            <AlternatingItemStyle CssClass="gridAlternative" />
            <ItemStyle CssClass="gridRow" />
            <Columns>
              <asp:TemplateColumn>
                <ItemTemplate>
                  <table cellpadding="2" cellspacing="0" width="100%">
                    <tr>
                      <td width="1%">
                        <asp:Image ID="img_Plus" runat="server" ImageUrl="~/DefaultImg/plus.gif" />
                        <asp:Label ID="lbl_Valor" runat="server" Text='<%# Bind("Valor") %>' Visible="false"></asp:Label>
                      </td>
                      <td width="99%">
                        Filho 1</td>
                    </tr>
                    <tr id="Tr" runat="server" style="display: none">
                      <td>
                      </td>
                      <td>
                        <asp:DataGrid ID="grid_Filho1" runat="server" AutoGenerateColumns="false" CellSpacing="3"
                          CssClass="gridDefaut" EnableViewState="false" GridLines="None" ShowHeader="false">
                          <AlternatingItemStyle CssClass="gridAlternative" />
                          <ItemStyle CssClass="gridRow" />
                          <Columns>
                            <asp:TemplateColumn>
                              <ItemTemplate>
                                <table cellpadding="0" cellspacing="0" width="100%">
                                  <tr>
                                    <td align="left" style="padding-right: 3px; padding-left: 3px; padding-bottom: 3px;
                                      padding-top: 3px" valign="top" width="1%">
                                      <asp:Image ID="img_Plus" runat="server" ImageUrl="~/DefaultImg/plus.gif" /></td>
                                    <td width="99%">
                                      Filho 2</td>
                                  </tr>
                                  <tr id="Tr" runat="server" style="display: none">
                                    <td>
                                    </td>
                                    <td>
                                      <asp:Label ID="lbl_IDPedido" runat="server" Text='<%# Bind("IDPedido") %>' Visible="false"></asp:Label>
                                      <asp:DataGrid ID="grid_Filho2" runat="server" AutoGenerateColumns="False" CellPadding="2"
                                        CellSpacing="2" CssClass="gridDefaut" EnableViewState="false" GridLines="None">
                                        <ItemStyle CssClass="gridRow" />
                                        <AlternatingItemStyle CssClass="gridAlternative" />
                                        <HeaderStyle CssClass="gridHeader" />
                                        <Columns>
                                          <asp:BoundColumn DataField="ProdutoCod" HeaderText="Código Produto"></asp:BoundColumn>
                                          <asp:BoundColumn DataField="GrupoProduto" HeaderText="Produto"></asp:BoundColumn>
                                          <asp:BoundColumn DataField="ProdutoNome" HeaderText="Apresentação"></asp:BoundColumn>
                                          <asp:BoundColumn DataField="Quantidade" HeaderText="Qtd."></asp:BoundColumn>
                                          <asp:BoundColumn DataField="LinhaProduto" HeaderText="Linha"></asp:BoundColumn>
                                          <asp:BoundColumn DataField="PercDesconto" DataFormatString="{0:F2}" HeaderText="%Desc"
                                            ItemStyle-HorizontalAlign="Center"></asp:BoundColumn>
                                          <asp:BoundColumn DataField="PrazoDescricao" HeaderText="Prazo" ItemStyle-HorizontalAlign="Center">
                                          </asp:BoundColumn>
                                          <asp:BoundColumn DataField="PrecoLiquido" DataFormatString="{0:F2}" HeaderText="Total Liq."
                                            ItemStyle-HorizontalAlign="Center"></asp:BoundColumn>
                                        </Columns>
                                      </asp:DataGrid>
                                    </td>
                                  </tr>
                                </table>
                              </ItemTemplate>
                            </asp:TemplateColumn>
                          </Columns>
                        </asp:DataGrid>
                      </td>
                    </tr>
                  </table>
                </ItemTemplate>
              </asp:TemplateColumn>
            </Columns>
          </asp:DataGrid>&nbsp;</div>
      </form>
    </body>
    </html>
    

    2 - Code Behind (fui comentando algumas linhas

    Imports System.Data
    Partial Class _Default
      Inherits System.Web.UI.Page
    
      Protected Sub btBuscar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btBuscar.Click
        Session("dtResultado") = Nothing
        Dim dtResultado As DataTable = "Uma select que retorne um DataTable com TODOS os registros"
        Session("dtResultado") = dtResultado
    
        'Criando as colunas da grid Pai (Principal)
        Dim dtPrincipal As New DataTable
        dtPrincipal.Columns.Add(New DataColumn("Valor", GetType(String)))
        dtPrincipal.Columns.Add(New DataColumn("Descricao", GetType(String)))
    
        'Escolhi uma Coluna da Select para fazer o agrupando e gerar o Pai. Para cada grupo, um novo cara adicionado
        dtResultado.DefaultView.Sort = "IdGrupo"
        Dim Valor As Integer
        For Each item As DataRowView In dtResultado.DefaultView
          If Valor <> item("IdGrupo") Then
            Dim Row As DataRow = dtPrincipal.NewRow
            Row("Valor") = item("IdGrupo")
            Row("Descricao") = item("Descricao")
            dtPrincipal.Rows.Add(Row)
    
            Valor = item("IdGrupo")
          End If
        Next
    
        dtPrincipal.DefaultView.Sort = "Descricao"
    
        grid_Principal.DataSource = dtPrincipal
        grid_Principal.DataBind()
        'Com isso, populamos a Grid Pai. Agora, para cada Filho, um tratamento (ver o ItemDataBound da grid_Principal)
      End Sub
    
      Protected Sub grid_Filho2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
          CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("OnClick", "MostraDiv(" & CType(e.Item.FindControl("Tr"), HtmlControls.HtmlTableRow).ClientID & ")")
          CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("Style", "Cursor:hand;")
    
          Dim grid_Filho2 As DataGrid = e.Item.FindControl("grid_Filho2")
          Dim dtResult As DataTable = CType(Session("dtResultado"), DataTable).Copy
          'Controi suas colunas como anteriormente...
    
          'NO final, filtra pelo cara que controla o Filho 1
          dtResult.DefaultView.RowFilter = "ID = " & CInt(CType(e.Item.FindControl("lbl_IDPedido"), Label).Text)
    
          grid_Filho2.DataSource = dtResult.DefaultView
          grid_Filho2.DataBind()
    
        End If
      End Sub
    
      Protected Sub grid_Principal_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles grid_Principal.ItemDataBound
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
          CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("OnClick", "MostraDiv(" & CType(e.Item.FindControl("Tr"), HtmlControls.HtmlTableRow).ClientID & ")")
          CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("Style", "Cursor:hand;")
    
          'Agora, para cada Pai (row), vou popular o respectivo filho
          Dim grid_Filho1 As DataGrid = e.Item.FindControl("grid_Filho1")
          AddHandler grid_Filho1.ItemDataBound, AddressOf grid_Filho2_ItemDataBound
    
          Dim dtResultado As DataTable = CType(Session("dtResultado"), DataTable).Copy
          Dim Grid As DataGrid = e.Item.FindControl("grid_Filho1")
          'Para controlar cada item
          Dim Valor As Integer = CType(e.Item.FindControl("lbl_Valor"), Label).Text
    
          'Filtro o cara pelo grupo que está sendo avaliado (lembrando que o ItemDataBound passa por todos os grupos da Principal)
          dtResultado.DefaultView.RowFilter = "IdGrupo = " & Valor
    
          'Crio o conteúdo do Filho
          Dim dtFilho1 As New DataTable
          dtFilho1.Columns.Add(New DataColumn("ID", GetType(Integer)))
          dtFilho1.Columns.Add(New DataColumn("Data", GetType(DateTime)))
          dtFilho1.Columns.Add(New DataColumn("Cliente", GetType(String)))
    
          'Insiro os itens respectivo
          Dim Id As Integer
          For Each item As DataRowView In dtResultado.DefaultView
            If Id <> item("ID") Then
              Dim Row As DataRow = dtFilho1.NewRow
              Row("ID") = item("ID")
              Row("Data") = item("Data")
              Row("Cliente") = item("Cliente")
              dtFilho1.Rows.Add(Row)
    
              Id = item("ID")
            End If
          Next
    
          dtFilho1.DefaultView.Sort = "Data"
          Grid.DataSource = dtFilho1.DefaultView
          Grid.DataBind()
          'Agora, vamos para o ItemDataBoynd do Filho2
        End If
      End Sub
    End Class






    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    sexta-feira, 28 de maio de 2010 17:57
  • Espero que ajude e que você consiga aplicar a sua situação:

    1 - Código ASPX:
    <%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %>
    
    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head runat="server">
    
     <title>Untitled Page</title>
    
     <script type="text/javascript" >
    
     function MostraDiv(Obj)
    
     {
    
      if(Obj.style.display == 'none')
    
      {
    
       Obj.style.display = 'block';
    
      }else
    
      {
    
       Obj.style.display = 'none';
    
      }
    
     }
    
     </script>
    
    </head>
    
    <body>
    
     <form id="form1" runat="server">
    
      <asp:ScriptManager ID="ScriptManager1" runat="server" />
    
      <div>
    
       <asp:ImageButton ID="btBuscar" runat="server" ImageUrl="~/DefaultImg/Search.gif" /><br />
    
       <br />
    
       <asp:DataGrid ID="grid_Principal" runat="server" AutoGenerateColumns="False" CellSpacing="3"
    
        CssClass="gridDefaut" EnableViewState="false" GridLines="None" ShowHeader="False">
    
        <AlternatingItemStyle CssClass="gridAlternative" />
    
        <ItemStyle CssClass="gridRow" />
    
        <Columns>
    
         <asp:TemplateColumn>
    
          <ItemTemplate>
    
           <table cellpadding="2" cellspacing="0" width="100%">
    
            <tr>
    
             <td width="1%">
    
              <asp:Image ID="img_Plus" runat="server" ImageUrl="~/DefaultImg/plus.gif" />
    
              <asp:Label ID="lbl_Valor" runat="server" Text='<%# Bind("Valor") %>' Visible="false"></asp:Label>
    
             </td>
    
             <td width="99%">
    
              Filho 1</td>
    
            </tr>
    
            <tr id="Tr" runat="server" style="display: none">
    
             <td>
    
             </td>
    
             <td>
    
              <asp:DataGrid ID="grid_Filho1" runat="server" AutoGenerateColumns="false" CellSpacing="3"
    
               CssClass="gridDefaut" EnableViewState="false" GridLines="None" ShowHeader="false">
    
               <AlternatingItemStyle CssClass="gridAlternative" />
    
               <ItemStyle CssClass="gridRow" />
    
               <Columns>
    
                <asp:TemplateColumn>
    
                 <ItemTemplate>
    
                  <table cellpadding="0" cellspacing="0" width="100%">
    
                   <tr>
    
                    <td align="left" style="padding-right: 3px; padding-left: 3px; padding-bottom: 3px;
    
                     padding-top: 3px" valign="top" width="1%">
    
                     <asp:Image ID="img_Plus" runat="server" ImageUrl="~/DefaultImg/plus.gif" /></td>
    
                    <td width="99%">
    
                     Filho 2</td>
    
                   </tr>
    
                   <tr id="Tr" runat="server" style="display: none">
    
                    <td>
    
                    </td>
    
                    <td>
    
                     <asp:Label ID="lbl_IDPedido" runat="server" Text='<%# Bind("IDPedido") %>' Visible="false"></asp:Label>
    
                     <asp:DataGrid ID="grid_Filho2" runat="server" AutoGenerateColumns="False" CellPadding="2"
    
                      CellSpacing="2" CssClass="gridDefaut" EnableViewState="false" GridLines="None">
    
                      <ItemStyle CssClass="gridRow" />
    
                      <AlternatingItemStyle CssClass="gridAlternative" />
    
                      <HeaderStyle CssClass="gridHeader" />
    
                      <Columns>
    
                       <asp:BoundColumn DataField="ProdutoCod" HeaderText="Código Produto"></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="GrupoProduto" HeaderText="Produto"></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="ProdutoNome" HeaderText="Apresentação"></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="Quantidade" HeaderText="Qtd."></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="LinhaProduto" HeaderText="Linha"></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="PercDesconto" DataFormatString="{0:F2}" HeaderText="%Desc"
    
                        ItemStyle-HorizontalAlign="Center"></asp:BoundColumn>
    
                       <asp:BoundColumn DataField="PrazoDescricao" HeaderText="Prazo" ItemStyle-HorizontalAlign="Center">
    
                       </asp:BoundColumn>
    
                       <asp:BoundColumn DataField="PrecoLiquido" DataFormatString="{0:F2}" HeaderText="Total Liq."
    
                        ItemStyle-HorizontalAlign="Center"></asp:BoundColumn>
    
                      </Columns>
    
                     </asp:DataGrid>
    
                    </td>
    
                   </tr>
    
                  </table>
    
                 </ItemTemplate>
    
                </asp:TemplateColumn>
    
               </Columns>
    
              </asp:DataGrid>
    
             </td>
    
            </tr>
    
           </table>
    
          </ItemTemplate>
    
         </asp:TemplateColumn>
    
        </Columns>
    
       </asp:DataGrid>&nbsp;</div>
    
     </form>
    
    </body>
    
    </html>
    
    
    
    

    2 - Code Behind (fui comentando algumas linhas

    Imports System.Data
    
    Partial Class _Default
    
     Inherits System.Web.UI.Page
    
    
    
     Protected Sub btBuscar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btBuscar.Click
    
      Session("dtResultado") = Nothing
    
      Dim dtResultado As DataTable = "Uma select que retorne um DataTable com TODOS os registros"
    
      Session("dtResultado") = dtResultado
    
    
    
      'Criando as colunas da grid Pai (Principal)
    
      Dim dtPrincipal As New DataTable
    
      dtPrincipal.Columns.Add(New DataColumn("Valor", GetType(String)))
    
      dtPrincipal.Columns.Add(New DataColumn("Descricao", GetType(String)))
    
    
    
      'Escolhi uma Coluna da Select para fazer o agrupando e gerar o Pai. Para cada grupo, um novo cara adicionado
    
      dtResultado.DefaultView.Sort = "IdGrupo"
    
      Dim Valor As Integer
    
      For Each item As DataRowView In dtResultado.DefaultView
    
       If Valor <> item("IdGrupo") Then
    
        Dim Row As DataRow = dtPrincipal.NewRow
    
        Row("Valor") = item("IdGrupo")
    
        Row("Descricao") = item("Descricao")
    
        dtPrincipal.Rows.Add(Row)
    
    
    
        Valor = item("IdGrupo")
    
       End If
    
      Next
    
    
    
      dtPrincipal.DefaultView.Sort = "Descricao"
    
    
    
      grid_Principal.DataSource = dtPrincipal
    
      grid_Principal.DataBind()
    
      'Com isso, populamos a Grid Pai. Agora, para cada Filho, um tratamento (ver o ItemDataBound da grid_Principal)
    
     End Sub
    
    
    
     Protected Sub grid_Filho2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
    
      If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
    
       CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("OnClick", "MostraDiv(" & CType(e.Item.FindControl("Tr"), HtmlControls.HtmlTableRow).ClientID & ")")
    
       CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("Style", "Cursor:hand;")
    
    
    
       Dim grid_Filho2 As DataGrid = e.Item.FindControl("grid_Filho2")
    
       Dim dtResult As DataTable = CType(Session("dtResultado"), DataTable).Copy
    
       'Controi suas colunas como anteriormente...
    
    
    
       'NO final, filtra pelo cara que controla o Filho 1
    
       dtResult.DefaultView.RowFilter = "ID = " & CInt(CType(e.Item.FindControl("lbl_IDPedido"), Label).Text)
    
    
    
       grid_Filho2.DataSource = dtResult.DefaultView
    
       grid_Filho2.DataBind()
    
    
    
      End If
    
     End Sub
    
    
    
     Protected Sub grid_Principal_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles grid_Principal.ItemDataBound
    
      If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
    
       CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("OnClick", "MostraDiv(" & CType(e.Item.FindControl("Tr"), HtmlControls.HtmlTableRow).ClientID & ")")
    
       CType(e.Item.FindControl("img_Plus"), Image).Attributes.Add("Style", "Cursor:hand;")
    
    
    
       'Agora, para cada Pai (row), vou popular o respectivo filho
    
       Dim grid_Filho1 As DataGrid = e.Item.FindControl("grid_Filho1")
    
       AddHandler grid_Filho1.ItemDataBound, AddressOf grid_Filho2_ItemDataBound
    
    
    
       Dim dtResultado As DataTable = CType(Session("dtResultado"), DataTable).Copy
    
       Dim Grid As DataGrid = e.Item.FindControl("grid_Filho1")
    
       'Para controlar cada item
    
       Dim Valor As Integer = CType(e.Item.FindControl("lbl_Valor"), Label).Text
    
    
    
       'Filtro o cara pelo grupo que está sendo avaliado (lembrando que o ItemDataBound passa por todos os grupos da Principal)
    
       dtResultado.DefaultView.RowFilter = "IdGrupo = " & Valor
    
    
    
       'Crio o conteúdo do Filho
    
       Dim dtFilho1 As New DataTable
    
       dtFilho1.Columns.Add(New DataColumn("ID", GetType(Integer)))
    
       dtFilho1.Columns.Add(New DataColumn("Data", GetType(DateTime)))
    
       dtFilho1.Columns.Add(New DataColumn("Cliente", GetType(String)))
    
    
    
       'Insiro os itens respectivo
    
       Dim Id As Integer
    
       For Each item As DataRowView In dtResultado.DefaultView
    
        If Id <> item("ID") Then
    
         Dim Row As DataRow = dtFilho1.NewRow
    
         Row("ID") = item("ID")
    
         Row("Data") = item("Data")
    
         Row("Cliente") = item("Cliente")
    
         dtFilho1.Rows.Add(Row)
    
    
    
         Id = item("ID")
    
        End If
    
       Next
    
    
    
       dtFilho1.DefaultView.Sort = "Data"
    
       Grid.DataSource = dtFilho1.DefaultView
    
       Grid.DataBind()
    
       'Agora, vamos para o ItemDataBoynd do Filho2
    
      End If
    
     End Sub
    
    End Class
    
    






    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633

    Vou testar e te falo...vlw
    sexta-feira, 28 de maio de 2010 18:36
  • Olha só, eu consegui implementar da forma que você indicou. Só que estou caindo no mesmo problema de não conseguir implementar o botar EDITAR do segundo nivel em diante. Para clicar no botar editar do segundo nível e ele tornar o campo SubAssunto Editavel. Consegui implementar o excluir do segundo nivel, mas o Editar não.
    Eu caio no seguinte.
    No gridPai eu tenho o metodo:
    protected void dgAssuntos_EditCommand(object source, DataGridCommandEventArgs e)
    {
      //dgAssuntos = DataGrid Pai
      dgAssuntos.EditItemIndex = e.Item.ItemIndex;
      //Bind DataGrid Pai
      carregaGridAssuntos();
    }

    Nesse método acima eu consigo acessar o grid pai e definir o "EditItemIndex" dele.
    Para o DatagridFilho 1 deveria ficar assim:
    protected void dgSubAssuntos_EditCommand(object source, DataGridCommandEventArgs e)
    {
      dgSubAssuntos.EditItemIndex = e.Item.ItemIndex;
    }
    Só que dentro desse metodo eu não consigo acessar o dgSubAssuntos, pois o mesmo está dentro de um TemplateColumn..
    Como eu faço para sair dessa?

    vou postar abaixo o meu codigo geral pra vc ver como ficou de acordo sua sugestão...

    1. Codigo ASPX
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CadastroAssuntos.aspx.cs" Inherits="CadastroAssuntos" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="frmAssuntos" runat="server">
        <asp:DataGrid runat="server" ID="dgAssuntos" AutoGenerateColumns="False" 
          oneditcommand="dgAssuntos_EditCommand" CellPadding="4" ForeColor="#333333" 
          GridLines="None" oncancelcommand="dgAssuntos_CancelCommand" 
          onupdatecommand="dgAssuntos_UpdateCommand" ShowHeader="False" 
          DataKeyField="Codigo" ondeletecommand="dgAssuntos_DeleteCommand" 
          onitemdatabound="dgAssuntos_ItemDataBound">
          <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
          <EditItemStyle BackColor="#999999" />
          <SelectedItemStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
          <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
          <AlternatingItemStyle BackColor="White" ForeColor="#284775" />
          <ItemStyle BackColor="#F7F6F3" ForeColor="#333333" />
          <Columns>
            <asp:TemplateColumn HeaderText="Nome">
              <EditItemTemplate>
                <asp:TextBox ID="txtAssunto" runat="server" Text= '<%# DataBinder.Eval(Container.DataItem, "Nome") %>'></asp:TextBox>
              </EditItemTemplate>
              <ItemTemplate>
                <table>
                  <tr>
                    <td>
                      <asp:Label ID="lblAssunto" runat="server" 
                        Text='<%# DataBinder.Eval(Container.DataItem, "Nome") %>'></asp:Label>
                    </td>
                    <td>
                      &nbsp;</td>
                  </tr>
                  <tr>
                    <td></td>
                    <td>
                      <asp:DataGrid ID="dgSubAssuntos" AutoGenerateColumns="False" runat="server" 
                        ShowHeader="False" Width="255px" GridLines="None" 
                        ondeletecommand="dgSubAssuntos_DeleteCommand" 
                        oneditcommand="dgSubAssuntos_EditCommand">
                        <Columns>
                          <asp:TemplateColumn HeaderText="Nome">
                            <EditItemTemplate>
                              <asp:TextBox ID="txtSubAssunto" runat="server" 
                                Text='<%# DataBinder.Eval(Container.DataItem, "Nome") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                              <asp:Label ID="lblSubAssunto" runat="server" 
                                Text='<%# DataBinder.Eval(Container.DataItem, "Nome") %>'></asp:Label>
                            </ItemTemplate>
                            <HeaderStyle Width="80%" />
                          </asp:TemplateColumn>
                          <asp:TemplateColumn HeaderText="Editar">
                            <EditItemTemplate>
                              <asp:LinkButton ID="lbSalvar" runat="server" CommandName="Update">Salvar</asp:LinkButton>
                              &nbsp;&nbsp;
                              <asp:LinkButton ID="lbCancelar" runat="server" CommandName="Cancel">Cancelar</asp:LinkButton>
                            </EditItemTemplate>
                            <ItemTemplate>
                              <asp:LinkButton ID="lbEditar" runat="server" CommandName="Edit">Editar</asp:LinkButton>
                            </ItemTemplate>
                            <HeaderStyle Width="10%" />
                          </asp:TemplateColumn>
                          <asp:ButtonColumn CommandName="Delete" HeaderText="Excluir" Text="Excluir">
                            <HeaderStyle Width="10%" />
                          </asp:ButtonColumn>
                          <asp:BoundColumn DataField="Codigo" HeaderText="Codigo" ReadOnly="True">
                          </asp:BoundColumn>
                        </Columns>
                      </asp:DataGrid>
                    </td>
                  </tr>
                </table>
              </ItemTemplate>
              <ItemStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" 
                Font-Strikeout="False" Font-Underline="False" VerticalAlign="Top" />
            </asp:TemplateColumn>
            <asp:TemplateColumn HeaderText="Editar">
              <EditItemTemplate>
                &nbsp;<asp:LinkButton ID="lbSalvar" runat="server" CommandName="Update">Salvar</asp:LinkButton>
                &nbsp;&nbsp;&nbsp;
                <asp:LinkButton ID="lbCancelar" runat="server" CommandName="Cancel">Cancelar</asp:LinkButton>
              </EditItemTemplate>
              <ItemTemplate>
                <asp:LinkButton ID="lbEditar" runat="server" CommandName="Edit">Editar</asp:LinkButton>
              </ItemTemplate>
              <ItemStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" 
                Font-Strikeout="False" Font-Underline="False" VerticalAlign="Top" />
            </asp:TemplateColumn>
            <asp:ButtonColumn CommandName="Delete" HeaderText="Excluir" Text="Excluir">
              <ItemStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" 
                Font-Strikeout="False" Font-Underline="False" VerticalAlign="Top" />
            </asp:ButtonColumn>
            <asp:BoundColumn DataField="Codigo" HeaderText="Codigo" ReadOnly="True" 
              Visible="False">
              <ItemStyle Font-Bold="False" Font-Italic="False" Font-Overline="False" 
                Font-Strikeout="False" Font-Underline="False" VerticalAlign="Top" />
            </asp:BoundColumn>
          </Columns>
          <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        </asp:DataGrid> 
      </form>
    </body>
    </html>
    1. Code Behind
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class CadastroAssuntos : System.Web.UI.Page
    {
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!IsPostBack)
        {
          carregaGridAssuntos();
        }  
      }
    
      private void carregaGridAssuntos()
      {
        AssuntoBLL assuntoBLL = new AssuntoBLL();
        dgAssuntos.DataSource = assuntoBLL.BuscaLista();
        dgAssuntos.DataBind();
      }
    
      protected void dgAssuntos_EditCommand(object source, DataGridCommandEventArgs e)
      {
        //dgAssuntos = DataGrid Pai
        dgAssuntos.EditItemIndex = e.Item.ItemIndex;
        //Bind DataGrid Pai
        carregaGridAssuntos();
      }
    
      protected void dgAssuntos_UpdateCommand(object source, DataGridCommandEventArgs e)
      {
        string nomeAssunto = ((TextBox)e.Item.FindControl("txtAssunto")).Text;
        Int32 codigo = Convert.ToInt32(e.Item.Cells[3].Text);
    
        AssuntoBLL assuntoBLL = new AssuntoBLL();
        assuntoBLL.Alterar(codigo, nomeAssunto);
    
        dgAssuntos.EditItemIndex = -1;
        carregaGridAssuntos();
      }
    
      protected void dgAssuntos_CancelCommand(object source, DataGridCommandEventArgs e)
      {
        dgAssuntos.EditItemIndex = -1;
        carregaGridAssuntos();
      }
    
      protected void dgAssuntos_DeleteCommand(object source, DataGridCommandEventArgs e)
      {
        Int32 codigo = Convert.ToInt32(e.Item.Cells[3].Text);
        AssuntoBLL assuntoBLL = new AssuntoBLL();
    
        assuntoBLL.Excluir(codigo);
    
        carregaGridAssuntos();
      }
    
      protected void dgAssuntos_ItemDataBound(object sender, DataGridItemEventArgs e)
      {
    
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
          Int32 codigoAssunto = Convert.ToInt32(e.Item.Cells[3].Text);
    
          SubAssuntoBLL subAssuntoBLL = new SubAssuntoBLL();
    
          ((DataGrid)e.Item.FindControl("dgSubAssuntos")).DataSource = subAssuntoBLL.BuscaLista(codigoAssunto);
          ((DataGrid)e.Item.FindControl("dgSubAssuntos")).DataBind();
        }
      }
    
      protected void dgSubAssuntos_DeleteCommand(object source, DataGridCommandEventArgs e)
      {
        Int32 codigoSubAssunto = Convert.ToInt32(e.Item.Cells[3].Text);
        SubAssuntoBLL subAssuntoBLL = new SubAssuntoBLL();
    
        subAssuntoBLL.Excluir(codigoSubAssunto);
        carregaGridAssuntos();
      }
      protected void dgSubAssuntos_EditCommand(object source, DataGridCommandEventArgs e)
      {
        //Eu nao consigo fazer isso abaixo pq nao tenho acesso ao dataGrid "dgSubAssuntos" pois ele esta dentro de um template.
        dgSubAssuntos.EditItemIndex = e.Item.ItemIndex;
      }
    }
    Valeu novamente pela ajuda.
    terça-feira, 1 de junho de 2010 01:09
  • Você vai ter que dar um FindControl nesse dgSubAssuntos para encontrar as coisas dentro dele. Como o edit command pega linha por linha, basta dar um FindControl no que você quiser lá dentro apenas pelo nome (não importa se está dentro de um template)

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    terça-feira, 1 de junho de 2010 12:12
  • Você vai ter que dar um FindControl nesse dgSubAssuntos para encontrar as coisas dentro dele. Como o edit command pega linha por linha, basta dar um FindControl no que você quiser lá dentro apenas pelo nome (não importa se está dentro de um template)

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633


    EU ja havia tentado achar pelo FindControl..Só que ele retorna null..

    eu use assim so para testar se vem algo, só que retorna NULL:

    protected void dgSubAssuntos_EditCommand(object source, DataGridCommandEventArgs e)
        {
          DataGrid gridSub = (DataGrid)e.Item.FindControl("dgSubAssuntos");
        }
    Há outra saida?
    terça-feira, 1 de junho de 2010 12:17
  • Sim. Nessas horas, existe uma magia negra chamada recursividade.

    Cria o método:

    Public Function FindControlRecursivo(ByVal root As Control, ByVal id As String) As Control
      If root.ID = id Then
       Return (root)
      End If
    
      For Each c As Control In root.Controls
       Dim t As Control = FindControlRecursivo(c, id)
       If t IsNot Nothing Then
        Return (t)
       End If
      Next
      Return (Nothing)
     End Function
    

    E chama ele assim:

    Dim dtgrid As DataGrid = FindControlRecursivo(Me.Page, "dgSubAssuntos")
    


    Isso encontra até seu cachorro morto atrás da porta.

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633
    terça-feira, 1 de junho de 2010 12:24
  • Sim. Nessas horas, existe uma magia negra chamada recursividade.

    Cria o método:

    Public Function FindControlRecursivo(ByVal root As Control, ByVal id As String) As Control
    
     If root.ID = id Then
    
      Return (root)
    
     End If
    
    
    
     For Each c As Control In root.Controls
    
      Dim t As Control = FindControlRecursivo(c, id)
    
      If t IsNot Nothing Then
    
      Return (t)
    
      End If
    
     Next
    
     Return (Nothing)
    
     End Function
    
    
    
    

    E chama ele assim:

    Dim dtgrid As DataGrid = FindControlRecursivo(Me.Page, "dgSubAssuntos")
    
    
    
    


    Isso encontra até seu cachorro morto atrás da porta.

    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    Se tiver paciência para avaliar, agradeço: http://premio.clubedeautores.com.br/web/site_premio/votar.php?id=12633


    Realmente..encontrou mesmo. Só que...kkk
    bom..Eu não precisava ter o objeto, simplesmente achar ele e mudar um atributo. Entao ao inves de retorno o objeto na funcao, eu alterei a propiedade que preciso.
    Só que como ele procura o objeto com akele ID ele sempre vai achar o primeiro gridFilho..
    Por exemplo:

    Se eu clicar em editar no primeiro gridfilho ele referencia a ele mesmo,ok! porque ele é o primeiro..se eu clicar no segundo gridFilho ou 3 ou o ultimo la em baixo..ele sempre referencia o primeiro la em cima....
    Que problema que estou..afff..

    • Marcado como Resposta Wallyson Keller quinta-feira, 25 de agosto de 2011 02:49
    terça-feira, 1 de junho de 2010 13:15