Pergunta

Estou vinculando meu controle DataSarepeater a uma tabela que possui muitas colunas. Eu gostaria de exibir apenas um subconjunto deles, dependendo do que é preenchido.

Como/onde devo fazer meus testes de contenção dentro de um DataRePeater? Este é o código no meu itemTemplate:

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

O erro que recebo é: cs0103: o nome 'contêiner' não existe no contexto atual

Foi útil?

Solução

Você deve ficar bem com isso:

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

Mas, dependendo do que você deseja fazer, eu provavelmente escreveria uma função para lidar com a ligação dos dados, a fim de manter a separação entre a exibição e a lógica de negócios.

por exemplo

em seu 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>

em seu código-behind:

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;
    }
  }
}

Pessoalmente, prefiro fazer as coisas dessa maneira, em vez de fazer qualquer lógica dentro do ASP. Sei que pode parecer um pouco bobo para algumas pessoas, mas gosto de manter minha lógica de negócios separada da minha lógica de exibição sempre que possível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top