Web User Controls in Repeaters with DataList

Discussion in 'ASP .Net Web Controls' started by Axel, Apr 20, 2010.

  1. Axel

    Axel Guest

    Hi,

    I have found an article on Web User Controls in Repeaters with DataList

    http://www.c-sharpcorner.com/UploadFile/Mike Clark/PartA02272007012412AM/PartA.aspx


    I am currently trying to incorporate a web user control for generating
    web content via a GenericList. I have managed to do all the coding for
    all the detail, have a lovely web user control coded, but I am binding
    to the Datasource in the Page_Load event of the container code (and not
    on the aspx page) - as only in the Page Load event the attribute list is
    populated:



    ==== page containing the repeater (excerpt) ===
    private Product _Product;

    Page_Load ...
    if (_Product.hasMasterAttributes) {
    if (Language == MasterLanguage)
    this.repeatAttributes.DataSource = _Product.masterAttributeList;
    else
    this.repeatAttributes.DataSource = _Product.localizedAttributeList;
    }


    === product class (excerpt) ====
    // the constructor fills the attributes from the database
    // these generic lists shall be used as DataSource for the repeater
    public List<ProductAttribute> masterAttributeList
    = new List<ProductAttribute>();
    public List<ProductAttribute> localizedAttributeList
    = new List<ProductAttribute>();

    public Int16 ProductStatus { get.. let...};
    public int localizedLanguageId=0;

    === ProductAttribute class; these are the items in the generic List ===
    public class ProductAttribute
    {
    // lazy interface a la 'struct'
    public int ProductId;
    public int LanguageId;
    public int AttributeCount;
    public string ContentTitle;
    public string ContentType;
    public string ContentText;
    public string AltText;
    public string ToolTipText;
    public string URI;
    public int SequenceCount;


    public ProductAttribute (int lProductId, int lLanguageId, int
    lAttributeCount, string sContentTitle, string sContentType, string
    sContentText, string sAltText, string sToolTipText, string sURI, int
    lSequenceCount)
    {
    this.ProductId = lProductId;
    this.LanguageId =lLanguageId;
    this.AttributeCount = lAttributeCount;

    this.ContentTitle = sContentTitle;
    this.ContentType = sContentType;
    this.ContentText = sContentText;
    this.AltText = sAltText;
    this.ToolTipText = sToolTipText;
    this.URI = sURI;

    this.SequenceCount = lSequenceCount;
    }
    }





    the Product class contains a Generic List of ProductAttribute class
    instances. (ProductAttribute is a very simple class which just serves as
    strongly typed container for my attributes).

    I am exposing the various attributes of ProductAttribute (such as
    ContentText, URL etc) as properties and also I have same public
    properties in the Web User Control in order to marshall data from the
    ProductAttribute instance to the Web User Control. What I am having real
    difficulty with is the actual binding of these attributes within the
    ItemTemplate, also I do not like using the server code on the asp page
    (especially since I can not debug what is happening) - do you know if
    it is possible to use an event for binding these?

    <asp:Repeater ID="repeatAttributes" runat="server"
    onitemdatabound="repeatAttributes_ItemDataBound"
    onitemcreated="repeatAttributes_ItemCreated" >
    <ItemTemplate >
    <uc1:EditAttributePanel ID="theAttributePanel"
    runat="server"


    ContentTitle="<%#DataBinder.Eval(Container.DataItem,"ContentTitle")%>"
    Language = "<%#DataBinder.Eval(Container.DataItem,"LanguageId")%>"
    Attribute = "<%#DataBinder.Eval(Container.DataItem,"AttributeCount")%>"



    />
    </ItemTemplate>
    </asp:Repeater>

    I had quite great trouble with the lines for copying data from the
    container List to the properties of the Web User Control (see 3 lkinbes
    above in the stripped down example above) lots of runtime compile
    errors, and I don't really like that code polluting the aspx file. Also
    now that the page is not crashing anymore, it doesn't show anything in
    the Repeater, although my generic lists definitelyt contain data; where
    can I check what data is being marshalled into the repeater?

    Also, can I re-trigger the databinding for the repeater from an
    interface of the repeater from code? (Did not find any DataBind() interface)

    I would prefer doing all the copying of data between List Item and web
    control instance from code, which would give me more control and I could
    add validation, is there an event I can use for this??? Or can I replace
    the awkward DataBinder.Eval stuff with some public methods on my page??

    Another feature that my project provides is a localization interface so
    the Product actually contains 2 Generic Lists of Attributes (one for the
    Master Language and one for the current translation), which is another
    reason that I would like to have the databinding in C# code and not on
    the container page itself.

    thanks in advance
    Axel
    Axel, Apr 20, 2010
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Axel Dahmen
    Replies:
    1
    Views:
    474
    Teemu Keiski
    Nov 12, 2003
  2. Nevyn Twyll
    Replies:
    8
    Views:
    1,849
  3. MattB

    Controls in repeaters

    MattB, Jul 20, 2007, in forum: ASP .Net
    Replies:
    3
    Views:
    418
    MattB
    Jul 23, 2007
  4. LandShark

    Repeaters, Controls and Events

    LandShark, Jul 24, 2007, in forum: .NET
    Replies:
    0
    Views:
    424
    LandShark
    Jul 24, 2007
  5. schiavonir
    Replies:
    1
    Views:
    1,587
    schiavonir
    Mar 25, 2009
Loading...

Share This Page