web-dev-qa-db-ja.com

リピーターコントロールのテキストボックスへのアクセス

これを行うために私が考えることができるすべての方法は非常にハックに思えます。これを行う正しい方法は何ですか、または少なくとも最も一般的ですか?

LINQ-to-SQLクエリから一連の画像を取得し、それと他のデータをリピーターにデータバインドしています。リピーターの各アイテムにテキストボックスを追加して、ユーザーが各画像のタイトルを変更できるようにする必要があります。Flickrとよく似ています。

リピーターコントロールのテキストボックスにアクセスして、そのテキストボックスがどの画像に属しているかを知るにはどうすればよいですか

Linq-to-SQLのすべての画像行を更新する送信ボタンを備えたリピーターコントロールは次のようになります。

代替テキストhttp://casonclagg.com/layout.jpg

編集:

このコードは機能します

私のようにif(!Page.IsPostBack)の外でBindingを実行して値を吹き飛ばさないようにしてください。

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div class="itemBox">
            <div class="imgclass">
                <a title='<%# Eval("Name") %>' href='<%# Eval("Path") %>' rel="gallery">
                    <img alt='<%# Eval("Name") %>' src='<%# Eval("Path") %>' width="260" />
                </a>
            </div>
            <asp:TextBox ID="TextBox1" Width="230px" runat="server"></asp:TextBox>
        </div>
    </ItemTemplate>
</asp:Repeater>

そして送信クリック:

protected void Button1_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem item in Repeater1.Items)
    {
        TextBox txtName = (TextBox)item.FindControl("TextBox1");
        if (txtName != null)
        {
            string val = txtName.Text;
            //do something with val
        }
    }
}
24
Jason

ボタンのクリックで次のようなことを試しましたか?

foreach (RepeaterItem item in Repeater1.Items)
{
      TextBox txtName= (TextBox)item.FindControl("txtName");
      if(txtName!=null)
      {
      //do something with txtName.Text
      }
      Image img= (Image)item.FindControl("Img");
      if(img!=null)
      {
      //do something with img
      }
}

/ * txtNameとImgは、それぞれリピーターのテキストボックスとイメージコントロールのIDです。* /

お役に立てれば。

34
Ashish Gupta

.aspx

        <asp:Repeater ID="rpt" runat="server" EnableViewState="False">
        <ItemTemplate>
                <asp:TextBox ID="txtQty" runat="server" /> 
        </ItemTemplate>
        </asp:Repeater>

.cs

        foreach (RepeaterItem rptItem in rpt.Items)
        {
            TextBox txtQty = (TextBox)rptItem.FindControl("txtQty");
            if (txtQty != null) { Response.Write(txtQty.Text); }          
        }

必ずリピーターにEnableViewState = "False"を追加してください。追加しないと、空の文字列が返されます。 (それは私の時間を無駄にしました、あなたのものを無駄にしないでください:))

12
Etienne Dupuis

ポストバックでは、repeater.ItemsのRepeaterItemsのコレクションを反復処理できます。次に、次のようなコードで各TextBoxを取得できます。

TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox");
0
Anthony Pegram