Add a list of self created web user controls to a listview in codebehind fails

邮差的信 提交于 2021-02-10 07:38:06

问题


I have a listview which I would like to fill with self created user controls.But the problem is that the properties in the user control is not set. The usercontrols are displayed but the property values I enter is not set. Why is that?

Here is the aspx code.

    <div id="productView" class="productsMain">
    <div id="groupHeader" class="productsGroupHeader">
        <asp:Label ID="lblGroupHeader" runat="server" Text="Gruppe" />
    </div>
    <asp:ListView ID="pListView" runat="server">
        <LayoutTemplate>
            <ul class="productListView" id="pList">
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server"></asp:PlaceHolder>
            </ul>
        </LayoutTemplate>
        <ItemTemplate>
            <li>
                <uc:Product ID="ucProduct" runat="server" />
            </li>
        </ItemTemplate>
        <EmptyDataTemplate>
            <div>
                Beklager - det er for tiden ingen varer i denne produktgruppen.
            </div>
        </EmptyDataTemplate>
    </asp:ListView>     
</div>

And here is the code behind

protected void Page_Load(object sender, EventArgs e)
{  
    Control product1 = LoadControl(@"~/UserControls/Product.ascx");
    ((UserControls_Product)product1).Test = 9999; 
    Control product2 = LoadControl(@"~/UserControls/Product.ascx");
    ((UserControls_Product)product2).Test = 8888; 

    List<UserControls_Product> l = new List<UserControls_Product>();
    l.Add((product1 as UserControls_Product));
    l.Add(product2 as UserControls_Product));       
    pListView.DataSource = l;
    pListView.DataBind(); 
}

回答1:


I am thinking again the issue here and I think that is totally different the way you need to handle it.

You create controls and you send them in the repeater, but the repeater him self its create the same controls in every line. What you need to send is the parameters only.

You make a list with int and you send to your control this values. Then its up to your control to make what its needs. For example.

protected void Page_Load(object sender, EventArgs e)
{  
    List<int> MyParam = new List<int>();

    MyParam.add(9999);
    MyParam.add(8888);

    pListView.DataSource = MyParam;
    pListView.DataBind(); 
}

public int GetTheProductID(object oItem)
{
    return (int)oItem;
}

And here is how you get and send your parametres to your control.

<ItemTemplate>
    <li>
        <uc:Product ID="ucProduct" runat="server" ProductID="<%#GetTheProductID(Container.DataItem)%>" />
    </li>
</ItemTemplate>

Now inside your control you have a public ProductID that you can use later on Page_Load()

You can use not only int, but class or struct to the list to send a lot of data.



来源:https://stackoverflow.com/questions/3522019/add-a-list-of-self-created-web-user-controls-to-a-listview-in-codebehind-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!