开发者

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

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(); 
}


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜