0

我有一个用来填充表格的中继器控件。当我使用在 aspx 代码中定义的 ObjectDataSource 填充转发器并将页眉和页脚移到模板外时,该控件起作用;但是,当我尝试将转发器数据源绑定到后面代码中的 DataTable 时,它​​不起作用。

这是我的aspx代码:

   <asp:Panel ID="panelViewApps" runat="server">
          <asp:Repeater ID="repeaterViewApplications" runat="server">
          <HeaderTemplate>
            <table class="items">
                <tr>
                <td><div align="center"><font color="#666666" size="2" face="Arial, Helvetica, sans-serif">Date</font></div></td>
                <td><div align="center"><font color="#666666" size="2" face="Arial, Helvetica, sans-serif">Number</font></div></td>
                <td><div align="center"><font color="#666666" size="2" face="Arial, Helvetica, sans-serif">Name</font></div></td>
                </tr>
          </HeaderTemplate>

          <ItemTemplate>
               <tr>
               <td><div align="center"><font color="#666666" size="2" face="Arial, Helvetica, sans-serif">
                    <%# DataBinder.Eval(Container.DataItem, "Application_Date") %></font></div></td>
               <td> something else </td>
               <td> something else </td>
               </tr>  
          </ItemTemplate>

          <FooterTemplate>
            </table>
          </FooterTemplate>
        </asp:Repeater>
   </asp:Panel>

我背后的代码:

panelViewApps.Visible = true;     
tblApplicationsTableAdapter app_adapter = new tblApplicationsTableAdapter();
DataTable apps = app_adapter.GetApps("some subset");
repeaterViewApplications.DataSource = apps;
repeaterViewApplications.DataBind();

我还尝试使用最后一个命令为 Page.Databind()

适配器方法返回正确的东西(事实证明,当我完全通过 aspx 填充时,这有效。在这种情况下,控件根本不显示。我已经更改了变量名 - 希望我没有引入无关紧要尝试关联问题的过程中出现错误。请注意,后面的代码是在按钮单击内部,而不是 load_page() 方法。(正确调用了按钮单击方法。)甚至表的标题都没有显示。当我在页面上“查看源代码”时,我看到 panelViewApps 的占位符 - 但没有表格(甚至是空表格)。

谁能看到我错过了什么?

4

1 回答 1

0

我找到了自己的解决方案。事实证明,我需要将 DataTable 包装在 DataView 中。

panelViewApps.Visible = true;     
tblApplicationsTableAdapter app_adapter = new tblApplicationsTableAdapter();
DataTable apps = app_adapter.GetApps("some subset");
//need to use a DataView instead of the DataTable directly
DataView apps_view = new DataView(apps);
repeaterViewApplications.DataSource = apps_view;
repeaterViewApplications.DataBind();
于 2013-11-08T21:09:03.147 回答