1

リピーター内に TextBox を配置しましたが、これらの TextBox にアクセスするための ID がわかりません。では、どのようにアクセスすればよいのでしょうか?

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
        <ItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true" ></asp:TextBox>
        </ItemTemplate>
    </asp:Repeater>

FindControl を使用しないでください。

アクセスするには、次のコードのようなものが必要です。

TextBox1.Text = "Hi";
4

4 に答える 4

1

私はあなたがそのようにすることをお勧めします...

// another way to search for asp elements on page


 public static void GetAllControls<T>(this Control control, IList<T> list) where T : Control
        {
            foreach (Control c in control.Controls)
            {
                if (c != null && c is T)
                    list.Add(c as T);
                if (c.HasControls())
                    GetAllControls<T>(c, list);
            }
        }
于 2013-02-17T08:44:00.830 に答える
0

FindControl を使用した多くの再帰を伴わない一般的な方法 (あまり効率的ではありません) は、リピーターでも OnItemDataBound を接続し、コード ビハインドでデータ行の個々の要素にアクセスすることです。ほとんどの場合、FindControl を使用する必要がありますが、この場合、コントロール コレクションに再帰する必要はありません。

void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {

      // This event is raised for the header, the footer, separators, and items.

      // Execute the following logic for Items and Alternating Items.
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {

         if (((Evaluation)e.Item.DataItem).Rating == "Good") {
            ((Label)e.Item.FindControl("RatingLabel")).Text= "<b>***Good***</b>";
         }
      }
   }   
于 2013-02-17T16:56:51.570 に答える