次のようにaspグリッドビューを持つリピーターがあります:
<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>
次に、ページの読み込み時に、datatable
20 行を含む a をこのリピーターにバインドします。
これは私のページ読み込みコードです
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 回バインドしますが、これは論理的に正しいのでしょうか、それとも何か間違ったことをしているのでしょうか?!
データがテーブルに 1 回だけバインドされていることを確認するフラグを簡単に設定できますが、データセットをリピーターにバインドした場合はどうなるでしょうか。グリッド ビューへのこのバインドを処理するにはどうすればよいですか?