Pregunta

Estoy vinculante mi control DataRepeater a una tabla que tiene muchas columnas. Me gustaría sólo para mostrar un subconjunto de ellos, dependiendo de lo que está poblada.

¿Cómo / dónde debería hacer mis pruebas contitional dentro de un DataRepeater? El código dentro de mi itemtemplate:

<% if (0= (DataBinder.Eval(Container.DataItem, "first").ToString().Length))
{
   i++;
}
    %>

El error que consigo es: CS0103: El nombre de 'contenedor' no existe en el contexto actual

¿Fue útil?

Solución

Se debe estar bien con esto:

<% if (0 == (Eval("first").ToString().Length))
{
   i++;
}
%>

Sin embargo, dependiendo de lo que quiere hacer, probablemente escribir una función para manejar la unión de los datos con el fin de mantener la separación entre la pantalla y la lógica de negocio.

por ejemplo.

en su aspx:

<asp:Repeater id="myRepeater" runat="server" onDataItemBound="FillInRepeater">
<ItemTemplate>
<div class="contactLarge">
    <div style="background-color:#C5CED8;clear:both"><asp:Label runat="server" ID="title"></asp:Label>
    .
    .
    .
</div>
</ItemTemplate>
<AlternatingItemTemplate>
</AlternatingItemTemplate>
</asp:Repeater>

en su código subyacente:

protected void FillInRepeater(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    //in here you bind to your repeater labels and stuff then do all that sorta logic.
    //Grab Primary Data
    string titleText = DataBinder.Eval(e.Item.DataItem, "title").ToString();
    string somethingElseText = DataBinder.Eval(e.Item.DataItem, "somethingElse").ToString();
    string maybeSeeMaybeDontText = DataBinder.Eval(e.Item.DataItem, "maybeSeeMaybeDont").ToString();

    //Find the controls and populate them according the to row
    Label titleLabel = (Label)e.Item.FindControl("title");
    Label somethingElseLabel = (Label)e.Item.FindControl("somethingElse");
    Label maybeSeeMaybeDontLabel = (Label)e.Item.FindControl("maybeSeeMaybeDont");

    // display the fields you want to
    titleLabel.Text = titleText;
    somethingElseLabel.Text = somethingElseText;

    // here is where you could do some of your conditional logic
    if (titleText.Length != 0 && somethingElseText.Length != 0)
    {
        maybeSeeMaybeDontLabel.Text = maybeSeeMaybeDontText;
    }
  }
}

personalmente, prefiero hacer las cosas de esta manera en lugar de hacer cualquier lógica dentro de la ASP. Sé que puede parecer un poco tonto para algunas personas, pero me gusta mantener mi lógica de negocio separada de mi lógica de visualización dondequiera que sea posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top