URGENT - Repeater Control using Dynamic Controls

Discussion in 'ASP .Net Web Controls' started by New User, Mar 5, 2004.

  1. New User

    New User Guest

    I am trying to build a simple user control made up of a single
    Repeater control and a bunch of dynamically created data entry
    controls. The problem that is occurring however is that I am unable
    to get the data back out of these controls on a postback so that I can
    update my original dataset. I have a moved a paired down version of
    the user control into a simple aspx page for posting here. Please
    take a look at it and let me know if the events ar eout of order or if
    there is another reason why it is not working. Thanks in advance.
    The main issue is the fact that I cannot retrieve the data from the
    controls in the "StorePageState" procedure. The FindControl function
    returns nothing even though the controls do exist in the Repeater
    Item. Thanks in advance.

    --------------------------------
    HTML FOR webforms1.aspx
    --------------------------------
    <%@ Page Language="vb" AutoEventWireup="false"
    Codebehind="WebForm1.aspx.vb" Inherits="TestPage.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>PagingRepeater</title>
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5"
    name="vs_targetSchema">
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:repeater id="RepeaterEvaluationCriteria"
    runat="server"></asp:repeater><asp:button id="Button1" runat="server"
    Text="Postback"></asp:button></form>
    </body>
    </HTML>

    --------------------------------
    CODE BEHIND FOR webforms1.aspx
    --------------------------------
    Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents RepeaterEvaluationCriteria As
    System.Web.UI.WebControls.Repeater

    Protected WithEvents Button1 As System.Web.UI.WebControls.Button


    #Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub
    InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles MyBase.Init
    'CODEGEN: This method call is required by the Web Form
    Designer
    'Do not modify it using the code editor.

    InitializeComponent()
    InitializeRepeaterTemplate()
    End Sub

    #End Region

    Const cCheckBoxName As String = "chkBox"

    Private Class TemplateRepeaterCriteria
    Implements ITemplate
    Dim TemplateType As ListItemType

    Sub New(ByVal type As ListItemType)
    TemplateType = type
    End Sub

    Private Sub TemplateControl_DataBinding(ByVal sender As
    Object, ByVal e As System.EventArgs)
    Dim TableCellCriteria As HtmlTableCell
    Dim CheckBoxItem As New CheckBox()
    Dim Container As RepeaterItem

    TableCellCriteria = CType(sender, HtmlTableCell)
    Container = CType(TableCellCriteria.NamingContainer,
    RepeaterItem)

    CheckBoxItem.ID = cCheckBoxName
    CheckBoxItem.Checked = DataBinder.Eval(Container.DataItem,
    "selected")
    TableCellCriteria.Controls.Add(CheckBoxItem)
    End Sub

    Sub InstantiateIn(ByVal Container As Control) Implements
    ITemplate.InstantiateIn
    Const cColumnSpan As String = "1"

    Select Case TemplateType
    Case ListItemType.Header
    Dim TableHeaderCriteria As New Literal()

    TableHeaderCriteria.Text = "<TABLE width='100%'
    border='0'>"
    TableHeaderCriteria.Text += "<TR><TD colspan='" &
    cColumnSpan & "'><HR width='100%'></TD></TR>"

    Container.Controls.Add(TableHeaderCriteria)

    'Cleanup all Header Template objects
    TableHeaderCriteria.Dispose()
    TableHeaderCriteria = Nothing

    Case ListItemType.Item
    Dim TableRowCriteria As New HtmlTableRow()
    Dim TableCellCriteria As New HtmlTableCell()

    'Add Evaluation Item Label Table Cell
    TableCellCriteria.NoWrap = True
    AddHandler TableCellCriteria.DataBinding,
    AddressOf TemplateControl_DataBinding

    'Append Label to the Current Table Row
    TableRowCriteria.Cells.Add(TableCellCriteria)

    Container.Controls.Add(TableRowCriteria)

    'Cleanup all Item Template Table Row and Cell
    objects
    TableRowCriteria.Dispose()
    TableRowCriteria = Nothing

    TableCellCriteria.Dispose()
    TableCellCriteria = Nothing

    Case ListItemType.Footer
    Dim CriteriaTableFooter As New Literal()

    CriteriaTableFooter.Text = "</TABLE>"
    Container.Controls.Add(CriteriaTableFooter)

    'Cleanup all Footer Template objects
    CriteriaTableFooter.Dispose()
    CriteriaTableFooter = Nothing

    End Select
    End Sub
    End Class


    Sub InitializeRepeaterTemplate()
    'Call constructor to build the custom Header template for the
    Evaluation Criteria Repeater
    RepeaterEvaluationCriteria.HeaderTemplate = New
    TemplateRepeaterCriteria(ListItemType.Header)

    'Call constructor to build the custom Item (row) template for
    the Evaluation Criteria Repeater
    RepeaterEvaluationCriteria.ItemTemplate = New
    TemplateRepeaterCriteria(ListItemType.Item)

    'Call constructor to build the custom Footer template for the
    Evaluation Criteria Repeater
    RepeaterEvaluationCriteria.FooterTemplate = New
    TemplateRepeaterCriteria(ListItemType.Footer)
    End Sub


    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles MyBase.Load
    'Put user code to initialize the page here
    If (Not IsPostBack) Then
    Load_Data()
    Else
    StorePageState()
    End If

    Bind_Repeater_Data()

    End Sub

    Private Sub Load_Data()

    Dim tb As DataTable = New DataTable()
    tb.Columns.Add("selected")

    Dim index As Integer = 0
    Dim NewRow As DataRow
    Dim i As Integer

    For i = 0 To 10
    index = i + 1
    NewRow = tb.NewRow()

    If (i Mod 2 = 0) Then
    NewRow("selected") = True
    Else
    NewRow("selected") = False
    End If

    tb.Rows.Add(NewRow)
    Next

    ViewState("TEMP_TABLE") = tb
    End Sub

    Private Sub Bind_Repeater_Data()

    If IsNothing(ViewState("TEMP_TABLE")) Then
    Load_Data()
    End If

    Dim tb As DataTable = CType(ViewState("TEMP_TABLE"),
    DataTable)
    Dim ttb As DataTable = tb.Clone()
    Dim recordcount As Integer = tb.Rows.Count
    Dim i As Integer

    For i = 0 To tb.Rows.Count - 1
    ttb.ImportRow(tb.Rows(i))
    Next

    RepeaterEvaluationCriteria.DataSource = ttb
    RepeaterEvaluationCriteria.DataBind()
    End Sub

    Private Sub StorePageState()
    Dim tb As DataTable = CType(ViewState("TEMP_TABLE"),
    DataTable)
    Dim chk As CheckBox
    Dim row As DataRow
    Dim i As Integer

    For i = 0 To RepeaterEvaluationCriteria.Items.Count - 1
    'PROBLEM HERE!!!!
    chk = CType(RepeaterEvaluationCriteria.Items(i).FindControl(cCheckBoxName),
    CheckBox)
    row = tb.Rows(i)
    row("selected") = chk.Checked
    Next
    End Sub

    End Class
     
    New User, Mar 5, 2004
    #1
    1. Advertising

  2. New User

    New User Guest

    My Appologies, In the 5 hours it took for this to be posted I found
    that you need to create a databind handler directly on the control
    within the ITemplate interface and not on the table cell containing
    it. Please disregard
     
    New User, Mar 5, 2004
    #2
    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. Replies:
    0
    Views:
    891
  2. Replies:
    0
    Views:
    2,917
  3. Replies:
    5
    Views:
    5,613
  4. Ronald
    Replies:
    2
    Views:
    867
    Robbe Morris [C# MVP]
    Jan 17, 2006
  5. Denny Smolinski via .NET 247

    Dynamic Controls, Placeholder, Retrieve Information from Dynamic Controls

    Denny Smolinski via .NET 247, May 4, 2004, in forum: ASP .Net Web Controls
    Replies:
    1
    Views:
    499
    Eidolon
    May 4, 2004
Loading...

Share This Page