0

私は他の投稿を見ましたが、私が非常にうまくやりたいことを説明するものは何もありませんでした。

実行時に、データベースから取得するデータに応じて、リピーターによってx個のLinkBut​​tonがフォームに追加されます。

<asp:Repeater ID="variantRepeat" runat="server" 
    onitemcommand="variantRepeat_ItemCommand">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate><li><asp:LinkButton ID="varLink" runat="server" CommandName="Click" CommandArgument='<%# Eval("variantID") %>'><%# Eval ("variant_name") %></asp:LinkButton></li></ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>

舞台裏でイベントの火をクリックすると、そうなるはずです

    protected void varLink_Click(object sender, EventArgs e)
    {
        ViewCollection views = prodView.Views;
    }

次に、いくつかのビューを設定します。ただし、CommandArgumentは、内部を検索するためのキーを保持しているため、通過する必要がありますprodView.Views

合格である必要はありませんがvariantID、どちらかによってはIntである可能性があります。表示するビューについて、何らかの指示が必要です。

すべてのビューをページの初期化で作成し、初期化で動的にページに追加しました。

エンティティフレームワークを使用して、いくつかのビューからデータベースにクエリを実行します。(リレーショナルデータベースから複雑なデータを取得する方が簡単であることがわかりました!)

プログラムでビューを切り替えることができるように、これらすべてのLinkBut​​tonをリンクする方法がわかりませんか?

4

1 に答える 1

1

より詳細なコードは次のとおりです。

ASPX:

<asp:TextBox runat="server" ID="txtVariant" /> 

<asp:Repeater ID="variantRepeat" runat="server" 
    OnItemCommand="variantRepeat_ItemCommand">
    <HeaderTemplate><ul></HeaderTemplate>
    <ItemTemplate>
        <li>
            <asp:LinkButton ID="varLink" runat="server" CommandName="Click" 
                CommandArgument='<%# Eval("variantID") %>'>
                <%# Eval ("variant_name") %></asp:LinkButton>
            </li>
        </ItemTemplate>
    <FooterTemplate></ul></FooterTemplate>
</asp:Repeater>

背後にあるコード:

[Serializable]
public class Variant
{
    public Variant() { }
    public int variantID { get; set; }
    public string variant_name { get; set; }
}

public partial class _Default : System.Web.UI.Page
{

    public Variant[] Variants
    {
        get
        {
            if (ViewState["Variants"] == null)
                return new Variant[] { };
            return (Variant[])ViewState["Variants"];
        }
        set { ViewState["Variants"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Variants = new Variant[] { 
                new Variant() { variantID = 1, variant_name = "T1" },
                new Variant() { variantID = 2, variant_name = "T2" }
            };
            variantRepeat.DataSource = Variants;
            variantRepeat.DataBind();
        }
    }

    protected void variantRepeat_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "Click":
                var variant = Variants.FirstOrDefault(v => v.variantID.ToString() == e.CommandArgument.ToString());
                if (variant != null)
                {
                    txtVariant.Text = variant.variantID.ToString();
                    // show the right view
                }
                break;
        }
    }
}

コードは保存コンテナとしてViewStateを使用していますが、Sessionを使用することもできます。

于 2012-06-25T16:44:18.390 に答える