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..