【发布时间】:2013-02-21 20:09:22
【问题描述】:
我有一个中继器,它的 asp gridview 如下:
<asp:Repeater ID="rep" runat="server" OnItemDataBound="rep_ItemDataBound">
<ItemTemplate>
<asp:GridView ID="grdVw" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="Link" HeaderText="Link" />
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:Repeater>
然后在页面加载时,我将包含 20 行的 datatable 绑定到此转发器:
这是我的页面加载代码
protected void Page_Load(object sender, EventArgs e){
//dummy code for testing
table.Columns.Add("Name");
table.Columns.Add("Link");
DataRow row ;
for (int i = 0; i <20; i++)
{
row = table.NewRow();
row[0] = "dsadsd";
row[1] = "text";
table.Rows.Add(row);
}
for (int i = 0; i < 10; i++)
{
ds.Tables.Add(table.Copy());
}
rep.DataSource = ds;
rep.DataBind();
}
然后我像这样处理转发器的ItemDataBoundevent:
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
GridView grdVw = e.Item.FindControl("grdVw") as GridView;
grdVw.DataSource = table;
grdVw.DataBind();
}
}
令人惊讶的是结果是 20 个网格视图!我认为这是因为ItemDataBound 在table 的每一行上触发。所以在这个处理程序事件中我绑定了表 20 次,但这在逻辑上是合理的还是我做错了什么?!
我可以轻松地使用一个标志来确保数据只绑定到表一次,但是如果我将数据集绑定到转发器怎么办?如何处理与网格视图的绑定?
【问题讨论】:
-
如果您将一个表绑定到具有 20 行的中继器,并且每行中都有一个 gridview,那么毫无疑问您将拥有 20 个网格视图。这正是您告诉它的.我想您的网格视图数据需要来自另一个变量。你究竟期望会发生什么?期望的结果是什么?
-
我想将一个数据集绑定到转发器,这样我就可以拥有这个数据集中的表格数量的网格视图,我应该在数据绑定中做什么,@Pow-Ian 是可能的
-
我明白了,所以您不是根据数据集中的表数进行绑定,而是希望在包含数据集中每个表的数据的每一行中绑定一个 gridview。那么,您的问题中的措辞是错误的。是的,这是可能的。
-
不,我只是用一个例子来解释,正如我所期望的,当我使用数据集时,网格视图的结果将是第 X 行表。这不是什么逻辑......你能解释一下我如何将数据集绑定到网格视图并让网格视图带有表格编号
标签: asp.net data-binding gridview dataset repeater