【问题标题】:DataRepeater displays different columns in each entryDataRepeater 在每个条目中显示不同的列
【发布时间】:2011-04-14 00:44:36
【问题描述】:

我有一个Repeater。它从某个表中获取数据。该表有 3 列。

我想要的是如果 column1 = true 将显示 column2 并且如果 column1 = false 将显示第 3 列。

布局将是这样的:

c1 = true  | c2
c1 = true  | c2
c1 = false | c3
c1 = true  | c2
c1 = false | c3

我怎样才能做到这一点?

【问题讨论】:

    标签: c# asp.net data-binding repeater


    【解决方案1】:

    只需在 Repeater 模板中使用 Literal

    <asp:Repeater runat="server" ID="rep"> 
        <ItemTemplate> 
            <asp:Literal runat="server" ID="lit1" OnDataBinding="lit1_DataBinding"></asp:Literal> 
        </ItemTemplate> 
    </asp:Repeater>
    

    然后实现DataBinding:

    protected void lit1_DataBinding(object sender, System.EventArgs e)
    {
        Literal lit = (Literal)(sender);
        lit.Text = ((bool)(Eval("Column1")) ?
            Eval("Column2").ToString() : Eval("Column3").ToString();
    }
    

    【讨论】:

      【解决方案2】:

      您可以在没有代码隐藏的情况下以声明方式完成所有操作:

      <asp:Repeater runat="server" ID="rpt">
          <ItemTemplate>
              <%# (bool)Eval("Column1") ? Eval("Column2") : Eval("Column3") %><br />
          </ItemTemplate>
      </asp:Repeater>
      

      【讨论】:

      • 艾莉森,太好了。如果 Column1 不是 bool 怎么办?
      • 没问题。什么是 Column1?从您的问题来看,听起来 Column1 是一个布尔值。
      • 正是因为这个原因,我很少在标记中添加任何逻辑并使用OnDataBinding 方法。然后,您可以根据需要使代码变得复杂。是的,您可以在标记中执行此操作,但它会在您的演示文稿中产生逻辑和代码,这是我尽量避免的。在您的 aspx 代码 IMO 中需要 C# 代码的理由很少。
      • 艾莉森。 Column1 是一个字符串,它代表一个类型。我有两种类型,由另外两列表示。因此,如果 type1 写在 column1 中,则只会显示 column2。实际上,我有很多类型。这就是为什么我不能使用 bool 。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2018-11-25
      • 2014-09-13
      • 2018-05-24
      • 2018-05-17
      • 1970-01-01
      相关资源
      最近更新 更多