【问题标题】:.NET Repeater HeaderTemplate.NET 中继器标头模板
【发布时间】:2010-12-01 00:36:55
【问题描述】:

有没有办法在标头模板中访问数据绑定转发器的字段标头名称。因此,这个....

                      <HeaderTemplate>
                          <table >
                              <th ></th>
                              <th >Forename</th>
                              <th >Surname</th>
                              <th >work email</th>
                              <th ></th>
                      </HeaderTemplate>

     We get something like this.                 

                      <HeaderTemplate>
                          <table >
                              <th ></th>
                              <th ><%# Eval("Forename").HeaderName%></th>
                              <th ><%# Eval("SureName").HeaderName%></th>
                              <th ><%# Eval("WorkEmail").HeaderName%></th>
                              <th ></th>
                      </HeaderTemplate>

【问题讨论】:

    标签: c# .net asp.net vb.net


    【解决方案1】:

    您不能在 HeaderTemplate 中使用 &lt;%# %&gt; 语法,因为它不在数据绑定方案中。但是,您应该能够使用&lt;%= %&gt;,然后在您的页面/用户控件上放置一些方法来返回标题。

    【讨论】:

      【解决方案2】:

      您可以像这样将表头移动到您的 ItemTemplate 中:

      <ItemTemplate>
          <asp:Panel runat="server" Visible='<%# Container.DisplayIndex == 0 %>'>
              <tr>
                  <th><%# Eval("Forename").HeaderName %></th>
              </tr>
          </asp:Panel>
          <tr>
              <td><%# Eval("Forename") %></td>
          </tr>
      </ItemTemplate>
      

      虽然这有点浪费,因为每行都会绑定标题(虽然只显示了第一行)。也许使用 而不是 Panel 会更好,但我不知道如何在该上下文中访问 Container.DisplayIndex。

      编辑:

      在 .net 4.5 Container.DisplayIndex 中不起作用;替换为Container.ItemIndex

      完整示例:

      <ItemTemplate>
          <asp:Panel runat="server" Visible='<%# Container.ItemIndex == 0 %>'>
              <tr>
                  <th><%# Eval("Forename").HeaderName %></th>
              </tr>
          </asp:Panel>
          <tr>
              <td><%# Eval("Forename") %></td>
          </tr>
      </ItemTemplate>
      

      【讨论】:

        【解决方案3】:

        尝试在标头模板中执行 Eval("Field").Property 会引发空异常。

        我会做这样的事情......

        背后的代码

        public partial class _Default : System.Web.UI.Page 
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                List<SomeData> data = new List<SomeData>();
        
                data.Add(new SomeData("Bob"));
                data.Add(new SomeData("Joe"));
        
                Repeater1.DataSource = data;
                Repeater1.DataBind();
            }
        
            public String FirstnameColumn {
                get { return "Firstname";  } 
            }
        }
        
        public class SomeData
        {
            public String Firstname { get; set; }
        
            public SomeData(String firstname) {
                this.Firstname = firstname;
            }
        }
        

        标记

        <table>
            <asp:Repeater ID="Repeater1" runat="server">
                <HeaderTemplate>
                    <tr><td><%= FirstnameColumn %></td></tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr><td><%# Eval("Firstname") %></td></tr>
                </ItemTemplate>
            </asp:Repeater>        
        </table>
        

        【讨论】:

          【解决方案4】:

          为什么不使用已在 RepeaterEvents 中找到的项目类型?

              protected void rptContent_DataBound(object Sender, RepeaterItemEventArgs e)
              {
                  if (e.Item.ItemType == ListItemType.Header)
                  {
                      var x= e.Item.FindControl("xxx") as Label;
                       ...
                  }
              }
          

          【讨论】:

          • 这是我正在寻找的信息。谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-15
          • 1970-01-01
          • 1970-01-01
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多