我经常处理Repeater
在我的asp.net页面中生成表格,但现在我需要在表格中处理动态列,所以我想知道是否有一个共同的方法使用Web控件解决此问题。
我从未使用过GridView
,所以我不知道用动态列渲染表是否更好?你能建议我哪种方法比较合适吗?有没有办法使用Repeater
来实现这一目标?
答案 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();