- PR -

Repeater の中の DataGrid が参照できない

1
投稿者投稿内容
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2005-06-09 09:15
ASP.NET(C#)での開発です。

Web フォームの Repeater の中に DataGrid を入れて、同一レイアウトの表が
縦に並ぶページを作成しています。
作りとしては <asp:Repeater> の中に <asp:DataGrid> を入れているだけなの
ですが、内部の DataGrid がプロパティのプルダウンに表示されません。
また、サーバ側のソースで ID に付けた文字列でコントロールを参照しても、
ウォッチでは <未定義の値> と表示され、NullReferenceException が発生し
ます。
DataGrid の値によりセルを結合したり、CssClass を変更したりしたいのです
が、どこに問題があるかおわかりになる方がいらっしゃいましたら、教えてく
ださい。

aspx ソースコードは下記の通りです。

<asp:Repeater ID="Repeater1" Runat="server">
<ItemTemplate>
<p>
<asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False"
CssClass="table_list_c" BorderStyle="NotSet" CellSpacing="1"
DataSource='<%#((DataRowView)Container.DataItem).Row.GetChildRows("Relation1") %>'
Width="97%">
<HeaderStyle CssClass="table_td_head_c"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="列1">
<HeaderStyle Wrap="False"></HeaderStyle>
<ItemStyle CssClass="label_l" Width="120px"></ItemStyle>
<ItemTemplate>
<%# ((DataRow)Container.DataItem)["Row1"] %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="列2">
<HeaderStyle Wrap="False"></HeaderStyle>
<ItemStyle CssClass="label_l"></ItemStyle>
<ItemTemplate>
<%# ((DataRow)Container.DataItem)["Row2"] %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="列3">
<HeaderStyle Wrap="False"></HeaderStyle>
<ItemStyle Wrap="False" CssClass="label_l" Width="80px"></ItemStyle>
<ItemTemplate>
<%# ((DataRow)Container.DataItem)["Row3"] %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="選択">
<HeaderStyle Wrap="False"></HeaderStyle>
<ItemStyle Wrap="False" CssClass="label_c" Width="20px"></ItemStyle>
<ItemTemplate>
<input name="RadioSelection" type="radio"
value='<%# ((DataRow)Container.DataItem)["Choice"] %>' />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
</p>
</ItemTemplate>
</asp:Repeater>
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-06-09 10:19
プロパティのプルダウンに表示されないのは、正常な挙動です。

ちなみに実行時にItemDataBoundでインスタンスを取得することができます。


_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-06-09 10:33
引用:

ちなみに実行時にItemDataBoundでインスタンスを取得することができます。



サンプル
http://www.atmarkit.co.jp/fdotnet/dotnettips/132nesteddg/nesteddg.html
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2005-06-09 13:06
どうもありがとうございます。

Repeater1 の ItemDataBound で下記の通り FindControl を使用することで
インスタンスを取得することができました。

DataGrid dg = (DataGrid)e.Item.FindControl("DataGrid1");
1

スキルアップ/キャリアアップ(JOB@IT)