Repeater Filho(ItemDataBound)

11/10/2012

Ola pessoal, sou iniciante na area de desenvolvimento , e estou tentando desenvolver um sistema de questionario, aceito criticas e sugestoes, e estou com dificuldade em capturar os dados da meu dataset de uma tabela filho no RESPOSTAS_ItemDataBound ,eu crio uma logica , se minha coluna ["tipo"] for igual a D, LABEL VISIBLE, assim como outras condicoes.
Desde ja obrigado pela forca pessoal.

Para desenvolver o sistema fiz um questinario dinamico usando dataset relations segue o codigo abaixo:

aspx:


<table cellspacing="2" cellpadding="2" border="2" width="100%">

        <asp:Repeater ID="QUESTIONARIO" runat="server" onitemdatabound="QUESTIONARIO_ItemDataBound" 

               >

        <HeaderTemplate>

            <th>Número da Questao</th>

            <th>Pergunta</th>

            <th>Respostas</th>

        </HeaderTemplate>

        <ItemTemplate>

            <tr>

            <td><%# DataBinder.Eval(Container.DataItem, "nro_item") %>  </td>

            <td><%# DataBinder.Eval(Container.DataItem, "ds_item") %>  </td>

            <td><asp:repeater id="RESPOSTAS"runat="server"onitemdatabound="RESPOSTAS_ItemDataBound"DataSource='<%# DataBinder.Eval(Container.DataItem, "minhaRelacao") %> '

            >

            <itemtemplate>

            <fieldset class ="fildPerguntas">

            <p><%# DataBinder.Eval(Container.DataItem, "[\"ds_subitem\"]")%>:

               <asp:Label ID="RatingLabel"runat="server"Text='<%# DataBinder.Eval(Container.DataItem,  "[\"tipo\"]") %>' Visible="True"></asp:Label>

               

            </p>

            </fieldset>

            </itemtemplate>

            </asp:repeater>

            </td>

            </tr>

        </ItemTemplate>

       

        </asp:Repeater>

        </table>



Metodo Classe Dado.cs


//Monta checklists Lasa

//Monta checklists Lasa

        public const string strQuest = "SELECT * FROM UNI_TB_ITENS";

        public const string strQuest2 = "SELECT * FROM UNI_TB_SUBITENS";

        public DataSet MontaQuestionario(Repeater Questinario)

            {

                var cnn = new SqlConnection(strConexao);

                var da = new SqlDataAdapter(strQuest,cnn);

                var ds = new DataSet();

                da.Fill(ds, "UNI_TB_ITENS");

                ds.Tables["UNI_TB_ITENS"].DefaultView.RowFilter = "ID_CANAL = " +     HttpContext.Current.Session["id_canal"] + " AND ID_PROJETO='2' ";

               da = new SqlDataAdapter(strQuest2, cnn);

               da.Fill(ds, "UNI_TB_SUBITENS");

              try

               {

                   ds.Relations.Add("minhaRelacao",

                    ds.Tables["uni_tb_itens"].Columns["id_item"],

                    ds.Tables["uni_tb_subitens"].Columns["id_item"]);

                    ds.Relations["minhaRelacao"].Nested = true;

                    Questinario.DataSource = ds.Tables["uni_tb_itens"];

                    Questinario.DataBind();

               }

                catch (SqlException ex)

                {

 

                    HttpContext.Current.Response.Write(ex.Message);

 

                }

 

                return ds;

            }

           

        }



Itemdatabound:


       protected void QUESTIONARIO_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
          
           
            ListItemType lt = e.Item.ItemType;
            if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
            {

                DataRowView dv = e.Item.DataItem as DataRowView;
              
                 if (dv != null)
                 {
                     Repeater nestedRepeater = e.Item.FindControl("RESPOSTAS") as Repeater;
                     if (nestedRepeater != null)
                     {

                       
                         nestedRepeater.DataSource = ((DataRowView)e.Item.DataItem).CreateChildView("minhaRelacao");
                         nestedRepeater.DataBind();
                         nestedRepeater.ItemDataBound += RESPOSTAS_ItemDataBound;
                        
                     }
                 }
            }
          
        }
        protected void RESPOSTAS_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item)
            {

                DataRowView dv = e.Item.DataItem as DataRowView;
                if (dv.Row["tipo"].ToString() == "D")
                {
                    Label RatingLabel= (Label)e.Item.FindControl("Label1"); //ele ignora
                    RatingLabel.Visible = true;
                } 
            }
            
        }


pessoal simplesmente ele nao faz nada , desde ja obrigado pela forca..

Rodrigolima

Respostas

11/10/2012

Rodrigolima

ola pessoal, sou iniciante na area de desenvolvimento , e estou tentando desenvolver um sistema de questionario, aceito criticas e sugestoes, e estou com dificuldade em capturar os dados da meu dataset de uma tabela filho no respostas_itemdatabound ,eu crio uma logica , se minha coluna ["tipo"] for igual a d, label visible, assim como outras condicoes. desde ja obrigado pela forca pessoal. para desenvolver o sistema fiz um questinario dinamico usando dataset relations segue o codigo abaixo: aspx: <table cellspacing="2" cellpadding="2" border="2" width="100%"> <asp:repeater id="questionario" runat="server" onitemdatabound="questionario_itemdatabound" > <headertemplate> <th>número da questao</th> <th>pergunta</th> <th>respostas</th> </headertemplate> <itemtemplate> <tr> <td><%# databinder.eval(container.dataitem, "nro_item") %> </td> <td><%# databinder.eval(container.dataitem, "ds_item") %> </td> <td><asp:repeater id="respostas"runat="server"onitemdatabound="respostas_itemdatabound"> <itemtemplate> <fieldset class ="fildperguntas"> <p><%# databinder.eval(container.dataitem, "[\"ds_subitem\"]")%>: <asp:label id="ratinglabel"runat="server"text='<%# databinder.eval(container.dataitem, "[\"tipo\"]") %>' visible="true"></asp:label> </p> </fieldset> </itemtemplate> </asp:repeater> </td> </tr> </itemtemplate> </asp:repeater> </table> metodo classe dado.cs //monta checklists lasa //monta checklists lasa public const string strquest = "select * from uni_tb_itens"; public const string strquest2 = "select * from uni_tb_subitens"; public dataset montaquestionario(repeater questinario) { var cnn = new sqlconnection(strconexao); var da = new sqldataadapter(strquest,cnn); var ds = new dataset(); da.fill(ds, "uni_tb_itens"); ds.tables["uni_tb_itens"].defaultview.rowfilter = "id_canal = " + httpcontext.current.session["id_canal"] + " and id_projeto='2' "; da = new sqldataadapter(strquest2, cnn); da.fill(ds, "uni_tb_subitens"); try { ds.relations.add("minharelacao", ds.tables["uni_tb_itens"].columns["id_item"], ds.tables["uni_tb_subitens"].columns["id_item"]); ds.relations["minharelacao"].nested = true; questinario.datasource = ds.tables["uni_tb_itens"]; questinario.databind(); } catch (sqlexception ex) { httpcontext.current.response.write(ex.message); } return ds; } } itemdatabound: protected void questionario_itemdatabound(object sender, repeateritemeventargs e) { listitemtype lt = e.item.itemtype; if (lt == listitemtype.item || lt == listitemtype.alternatingitem) { datarowview dv = e.item.dataitem as datarowview; if (dv != null) { repeater nestedrepeater = e.item.findcontrol("respostas") as repeater; if (nestedrepeater != null) { nestedrepeater.datasource = ((datarowview)e.item.dataitem).createchildview("minharelacao"); nestedrepeater.databind(); nestedrepeater.itemdatabound += respostas_itemdatabound; } } } } protected void respostas_itemdatabound(object sender, repeateritemeventargs e) { if (e.item.itemtype == listitemtype.item) { datarowview dv = e.item.dataitem as datarowview; if (dv.row["tipo"].tostring() == "d") { label ratinglabel= (label)e.item.findcontrol("label1"); //ele ignora ratinglabel.visible = true; } } } pessoal simplesmente ele nao faz nada , desde ja obrigado pela forca..
Responder Citar