2

ここで壁にぶつかったようです。一部のデータソースをasp.netリピーターにバインドしたい(まあ、リピーターである必要はありませんが、それが私が望んでいるようです)。さて、問題は次のとおりです。データ (TextBox とボタン) を更新するために、そのリピーター内にいくつかのサーバー コントロールも必要です。

私の理解では、これは整然とした方法で行うことは本当に可能ではありませんか? itemtemplate にテキストボックスを追加して、後でコード ビハインドで取得することはできません。少なくとも簡単ではありません。この種の問題に対する既知の手法はありますか?

データを特定の方法でフォーマットする必要があるため、グリッドビューを使用できません。

4

3 に答える 3

6

ItemCommand を使用せず、Repeater のアイテム コレクションをループするだけで、ページの下部に「保存」ボタンが 1 つある場合は、次のように実行できます。

foreach(RepeaterItem itm in MyRepeater.Items)
{
     TextBox t = (TextBox)(itm.FindControl("TextBox1"));
     // do something with it.

}

もちろん、ASPX の TextBox1 に Runat="Server" 属性があることを確認する必要があります。

于 2009-07-27T23:25:55.407 に答える
2

Repeater.ItemDataBoundイベントを使用して、 Repeaterにネストされたコントロールを見つけることができます。

<asp:Repeater ID="Repeater1" Runat="server" OnItemDataBound="Repeater1_ItemDataBound">
   <ItemTemplate>
      <div><asp:TextBox ID="TextBox1" runat="server" /></div>
   </ItemTemplate>
</asp:Repeater>

次に、コードビハインドで:

protected void Repeater1_ItemDataBound(object source, RepeaterCommandEventArgs e)
{
   if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType !=
      ListItemType.AlternatingItem)
      return;

   TextBox textBox1 = e.Item.FindControl("TextBox1") as TextBox;
   if (textBox1 != null)
   {
   // do something with it
   }
}
于 2009-07-27T22:44:49.313 に答える
1

私の問題は私が考えていた方法にあったようです:)

私の解決策: 通常どおりコントロールを追加しましたが、ItemTemplate 内に追加しました。コントロールのコールバック イベントでは、次のようにします。

(ボタン例)

protected void btnUpdate_OnClick(object sender, EventArgs e)
    {
        Button b = sender as Button;
        if (b != null)
        {
            RepeaterItem ri = b.Parent as RepeaterItem;
            if (ri != null)
            {
                string name = null;

                //Fetch data
                TextBox txtName = ri.FindControl("txtName") as TextBox;

などなど。

したがって、RepeaterItem を見つけた後、ControlGroup と同じように扱います。ID="txtName" でコード化された 5 つの異なる textbosses を実際に取得したことは問題ではありません。asp.net はクライアント マークアップでコントロールに「難読化された」名前を自動的に与え、これをポストバックの ID に変換するためです。

これが誰かの役に立てば幸いです。お手数をおかけして申し訳ありません:)

于 2009-07-27T23:25:35.750 に答える