在ASP ListView中自动添加表列名称?

时间:2010-02-17 21:15:54

标签: .net asp.net listview

我有一个ASP ListView,用于在表格中显示一些透视信息(跨年)。目前我将ListView模板定义为:

<LayoutTemplate>
  <table id="listViewTable" class="tableData">
    <tr class="rowHeader">
        <td style="text-align: left;">Rank / Equivalent Rank</td>
        <td>2004</td>
        <td>2005</td>
        <td>2006</td>
        <td>2007</td>
        <td>2008</td>
        <td>2009</td>
        <td>2010</td>
    </tr>
    <tr id="itemPlaceholder" runat="server"></tr>
  </table>
</LayoutTemplate>
<ItemTemplate>
  <%#addListViewSectionHeaderRow()%>
    <%#addListViewRankValueCell()%>
    <td class="cellNumeric"><%#formatNumber(Eval("2004"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2005"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2006"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2007"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2008"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2009"))%></td>
    <td class="cellNumeric"><%#formatNumber(Eval("2010"))%></td>
  </tr>
</ItemTemplate>

正如您在Eval()语句中所看到的,幕后查询中的列已经选择了页面上显示的年份。

如何在LayoutTemplate中显示查询中的列名而不是我拥有的硬编码值?我觉得在某个地方的文档中很容易找到,但我找不到任何东西......但也许我找不到合适的地方......

谢谢!


编辑:我想在定义Eval()语句中的实际年份时也遇到问题。我希望尽可能自动化,因此,例如,当出现2011年数据时,该页面仅反映了2005 - 2011年。也许我在考虑这个目标时做了一些根本错误的事情?

2 个答案:

答案 0 :(得分:2)

ListView或GridView,这应该很简单。只要您总是希望将此基于当年,您就可以这样做:

<asp:ListView ID="ListView1" runat="server">
        <LayoutTemplate> 
            <table id="listViewTable" class="tableData"> 
            <tr class="rowHeader"> 
                <td style="text-align: left;">Rank / Equivalent Rank</td> 
                <td><%= DateTime.Today.AddYears(-6).Year%></td> 
                <td><%= DateTime.Today.AddYears(-5).Year%></td> 
                <td><%= DateTime.Today.AddYears(-4).Year%></td> 
                <td><%= DateTime.Today.AddYears(-3).Year%></td> 
                <td><%= DateTime.Today.AddYears(-2).Year%></td> 
                <td><%= DateTime.Today.AddYears(-1).Year %></td> 
                <td><%= DateTime.Today.Year %></td> 
            </tr> 
            <tr id="itemPlaceholder" runat="server"></tr> 
            </table> 
        </LayoutTemplate> 
        <ItemTemplate> 
            <tr>
                <%#addListViewSectionHeaderRow()%> 
                <%#addListViewRankValueCell()%> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-6).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-5).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-4).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-3).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-2).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.AddYears(-1).Year.ToString()))%></td> 
                <td class="cellNumeric"><%#formatNumber(Eval(DateTime.Today.Year.ToString()))%></td> 
            </tr> 
        </ItemTemplate>
    </asp:ListView>

真的,我所做的就是告诉表单使用当前年份减去X.这样,年份会根据表单的查看时间自动更改。

我无法测试这个,所以原谅我的错字,如果有的话。

答案 1 :(得分:0)

如果您没有使用ListView设置死机,则可以使用GridView将AutoGenerateColumns属性设置为true。这样,结果表将自动从结果集中选取所有可用列。