dポイントプレゼントキャンペーン実施中!

ASP.NETで質問です。

<asp:Repeater ID="rp" runat="server" OnItemDataBound="rp_OnItemDataBound">
<ItemTemplate>
<asp:Literal ID="ltr_num" runat="server" />
<asp:Literal ID="ltr_name" runat="server" />
<br />
</ItemTemplate>
</asp:Repeater>

rp_OnItemDataBoundメソッドでltr_num,ltr_nameに値を入れたいのですが、
ltr_num.Text,ltr_name.Textにアクセスできません。

どなたか教えてください。
お願い致します。

A 回答 (2件)

ビハインドコードがC#かVBかわからないので、とりあえずC#として、書いてあります。


VBであれば、読み替えをしてください。


ページロードでデータセットをRepeaterにセット
protected void Page_Load(object sender, EventArgs e)
{
  DataTable l_dtb = new DataTable();
  l_dtb.Columns.Add("A", typeof(int));
  l_dtb.Columns.Add("B", typeof(string));

  for (int i = (int)'a'; i <= (int)'z'; i++)
  {
    l_dtb.Rows.Add(new object[] { i, ((char)i).ToString() });
  }

  this.rp.DataSource = l_dtb;
  this.rp.DataBind();
}
仮にこういった場合、


-------------------------------------------------
aspxファイルで、勝手にセットを行いたい場合
-------------------------------------------------
<asp:Literal ID="ltr_num" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "A")%>' />
<asp:Literal ID="ltr_name" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "B")%>' />
というにしてもできます。


-------------------------------------------------
OnItemDataBoundイベントで、セットを行いたい場合
-------------------------------------------------
以下のようにするとできます。
protected void rp_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
  DataRow l_drw = ((DataRowView)e.Item.DataItem).Row;

  Literal l_ltr_num = (Literal)e.Item.FindControl("ltr_num");
  l_ltr_num.Text = l_drw["A"].ToString();
  
  Literal l_ltr_name = (Literal)e.Item.FindControl("ltr_name");
  l_ltr_name.Text = l_drw["B"].ToString();
}
    • good
    • 0

Literalは、repeaterコントロールのItemTemplateとして利用できなさそうな。


なんかItemを設定したいのだったら、DataSource側をいじってみては。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!