使用动态列处理表的最佳方法

时间:2012-09-04 08:55:30

标签: c# asp.net .net

我经常处理Repeater在我的asp.net页面中生成表格,但现在我需要在表格中处理动态列,所以我想知道是否有一个共同的方法使用Web控件解决此问题。

我从未使用过GridView,所以我不知道用动态列渲染表是否更好?你能建议我哪种方法比较合适吗?有没有办法使用Repeater来实现这一目标?

3 个答案:

答案 0 :(得分:1)

GridView AutoGenerateColumns设置为true。它会检查并添加DataSource

中的列
<asp:sqldatasource id="CustomersSource"
  selectcommand="SELECT CustomerID, CompanyName, FirstName, LastName FROM SalesLT.Customer"
  connectionstring="<%$ ConnectionStrings:AWLTConnectionString %>" 
  runat="server"/>

<asp:gridview id="CustomersGridView" 
  datasourceid="CustomersSource" 
  autogeneratecolumns="True"
  emptydatatext="No data available." 
  allowpaging="True" 
  runat="server" DataKeyNames="CustomerID">
</asp:gridview>

答案 1 :(得分:0)

知道如何处理这种情况非常重要。

情况1: 您有一个现有的表,并且不时添加列(虽然这不是很实用),您可以立即转到GridView并将AutoGenerateColumns绑定属性设置为true。

情况2

您可以创建自己的HTmlHelper类来处理表。 为此,您可以访问以下帖子:

How to create MVC HtmlHelper table from list of objects

如果您正在使用MVC。

答案 2 :(得分:0)

如果您必须使用Repeater

,请执行此操作

在.aspx:


    <asp:Repeater ID='rptr' runat='server'>
        <HeaderTemplate>
            <table>
                <thead>
                  <tr>
                    <th>
                        Always visible header col
                    </th>
                    <th id='thHidable' runat='server' class='hideable'>
                        Hideable header col
                    </th>
                  </tr>
                </thead>
                <tbody>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    Repeated col
                </td>
                <td id='tdHideable' runat='server' class='hideable'>
                    Hideable repeated col
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </tbody></table>
        </FooterTemplate>
    </asp:Repeater>

在后面的代码中(假设使用了C#):

    protected override void Page_Init()
    {
        this.rptr.ItemDataBound += new RepeaterItemEventHandler(rptr_ItemDataBound);
    }
    void rptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = (RepeaterItem)e.Item;
        if (item.ItemType == ListItemType.Header)
        {
            HtmlTableCell thHidable = (HtmlTableCell)item.FindControl("thHidable");
            if (hideCondition)
            {
                // thHidable.Visible = false; // do not render, not usable by client script (use this approach to prevent data from being sent to client)
                thHidable.Style["display"] = "none"; // rendered hidden, can be dynamically shown/hidden by client script
            }
        }
        else if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            HtmlTableCell tdHideable = (HtmlTableCell)item.FindControl("tdHideable");
            if (hideCondition)
            {
                // tdHideable.Visible = false; // do not render, not usable by client script (use this approach to prevent data from being sent to client)
                tdHideable.Style["display"] = "none"; // rendered hidden, can be dynamically shown/hidden by client script
            }
        }
    }

(可选)如果要在客户端动态显示列(假设已呈现),请使用jQuery(为简洁起见):

$(".hideable").show();