Array
(
)

Repeater Filho(ItemDataBound)

Rodrigolima
   - 11 out 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:

#Código

<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
#Código

//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:

#Código
       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
   - 11 out 2012


Citação:
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..