views:

21

answers:

1

Hi. 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  A: 

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.

Aristos
I tried to add the list to Page_Init and have the DataBind in Page_Load but this didn't help. Any other thoughts about this issue?
seddler
@seddler I have change the way of the solution, this is working for sure and its a better and correct one.
Aristos
Tanks a lot!!! This saved my day. Your solution worked perfect.
seddler