6

xml ドキュメントにデータバインドされているリピーター コントロールを自分で持っていることがわかりました。私のクライアントは、リピーターであるテキストボックスがテキストボックスまたはチェックボックスのいずれかになることを要求しています。

基本的に次のことを行う簡単な方法が見つからないようです。

if ((System.Xml.XmlNode)e.Item.DataItem.Attributes["type"] == "text")
<asp:TextBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>
else
<asp:CheckBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>

ロジックを書き直さなくても、現在の実装を拡張できる良い方法はありますか。「OnItemDataBound」を介してコントロールを注入できれば、それも問題ありません。しかし、私はそれを機能させることができないようです

4

4 に答える 4

5

リピーターに Panel をドロップし、リピーターのデータ バインディング イベントのイベント ハンドラーを作成し、プログラムで TextBox または CheckBox を作成し、それを Panel の子コントロールとして追加します。イベント引数から DataItem を取得して、「タイプ」属性や値などの情報を取得して、テキスト プロパティや CSS 情報などをフィードできる必要があります。

于 2008-09-24T16:14:28.667 に答える
4

私はmspmspの提案に行きます。その例として、簡単で汚いコードを次に示します。

これを aspx に配置します。

<asp:Repeater ID="myRepeater" runat="server" OnItemCreated="myRepeater_ItemCreated">
    <ItemTemplate>
        <asp:PlaceHolder ID="myPlaceHolder1" runat="server"></asp:PlaceHolder>
        <br />
    </ItemTemplate>
</asp:Repeater>

そして、これはコードビハインドで:

dim plh as placeholder
dim uc as usercontrol
protected sub myRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
    if TypeOf e Is ListItemType.Item Or TypeOf e Is ListItemType.AlternatingItem Then
        plh = ctype(e.item.findcontrol("myPlaceHolder1"), Placeholder)
        uc = Page.LoadControl("~/usercontrols/myUserControl.ascx")
        plh.controls.add(uc)
    end if
end sub
于 2008-10-14T03:21:33.927 に答える
3

テキストボックスとチェックボックスの各コントロールのマークアップでこれに似たものはどうですか?

Visible=<%= Eval("type").tostring() == "text") %>
于 2008-09-24T16:09:57.773 に答える
0

データに基づいてコントロールを追加する必要がある場合は、次のアプローチを使用できます。

<asp:Repeater ID="ItemsRepeater" runat="server" OnItemDataBound="ItemRepeater_ItemDataBound">
    <itemtemplate>
        <div>
            <asp:PlaceHolder ID="ItemControlPlaceholder" runat="server"></asp:PlaceHolder>
        </div>
    </itemtemplate>
</asp:Repeater>
protected void ItemRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var placeholder = e.Item.FindControl("ItemControlPlaceholder") as PlaceHolder;
    var col = (ItemData)e.Item.DataItem;

    placeholder.Controls.Add(new HiddenField { Value = col.Name });
    placeholder.Controls.Add(CreateControl(col));
}
于 2021-05-26T15:41:07.603 に答える