求救Repeater动态列显示的一个问题
前台:
<asp:Repeater ID="Repeater1" runat="server" EnableViewState="false"
OnItemDataBound="Repeater1_ItemDataBound">
<headerTemplate>
<asp:Literal ID="lit_head" runat="server"></asp:Literal>
</headertemplate>
<itemtemplate>
<asp:Literal ID="lit_item" runat="server"></asp:Literal>
</itemtemplate>
</asp:Repeater>
后台:
private static DataTable dt = new DataTable();//全局变量
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
this.Repeater1.DataSource = 已经取出来的datatable
this.Repeater1.DataBind();
dt = ExecDataTable(querySql);
}
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
StringBuilder sb = new StringBuilder();
if (e.Item.ItemType == ListItemType.Header)
{
sb.Append("<tr>");
foreach (DataColumn col in dt.Columns)
{
sb.AppendFormat("<td>{0}</td>", col.ColumnName);//取出列名
}
sb.Append("</tr>");
Literal literal = (Literal)e.Item.FindControl("lit_head");
literal.Text = sb.ToString();
}
else if (e.Item.ItemType == ListItemType.Item)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.Append("<tr>");
for (int j = 0; j < dt.Columns.Count; j++)
{
sb.AppendFormat("<td class=\"dxgv\">{0}</td>", dt.Rows[i][j]);
}
sb.Append("</tr>");
}
Literal liter = (Literal)e.Item.FindControl("lit_item");
liter.Text = sb.ToString();
}}
-------------------------
代码如上,现在的问题是我在repeater的Repeater1_ItemDataBound事件里,绑定值的时候发现ListItemType.Header的列头部分是显示一行的,但是item部分不断的循环,将查出的liter.Text 循环了多次!所以我在界面上显示的数据重复了多遍。
我想问的是我的代码出错在哪里了?
------解决方案--------------------去掉这个 this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);试试
------解决方案--------------------看下这个文章,希望对你有帮助
http://blog.csdn.net/hj850126/article/details/7483077
------解决方案--------------------我知道问题在哪里,你这个事件Repeater1_ItemDataBound 是这样工作的,
每从datatable取出一行数据,它就启动一次。而你的代码会启动这个事件很多次,所以......