VHK
VHK

Reputation: 193

GridView template field events

I have added Checkbox and Radio buttons as column values to the GridView in runtime.

Now, i am unable to fire Checkbox_CheckedChanged event upon Checkbox.checked

Any suggestions on how to call event ? Below is the Grid i implemented.

enter image description here

Below is the source code:

1) Grid Init

 Dim COUNT As Integer = 0
        For i As Integer = 0 To ListHeaderDataFieldArray.Count - 1
            If ListHeaderDataFieldArray(i) = Me.CRMSignCond Then
                Dim TemplateCol As New TemplateField
                TemplateCol.ItemStyle.HorizontalAlign = HorizontalAlign.Center
                TemplateCol.ItemStyle.Width = New Unit(RowChildWidth)
                TemplateCol.HeaderText = ListHeaderTextArray(i)
                TemplateCol.ItemTemplate = New GridViewTemplate(DataControlRowType.DataRow, ListHeaderDataFieldArray(i))
                GridviewChild.Columns.Add(TemplateCol)
            Else
                If ListHeaderTextArray(i) = "Target Sign" Then
                    Dim colItem As TemplateField = New TemplateField
                    colItem.HeaderText = ListHeaderTextArray(i)
                    'colItem.DataField = ListHeaderDataFieldArray(i)
                    colItem.SortExpression = ListHeaderDataFieldArray(i)
                    colItem.ItemStyle.Width = New Unit(RowChildWidth)
                    GridviewChild.Columns.Add(colItem)
                ElseIf ListHeaderTextArray(i) = "Consolidate" Then
                    Dim colItem As TemplateField = New TemplateField
                    colItem.HeaderText = ListHeaderTextArray(i)
                    'colItem.DataField = ListHeaderDataFieldArray(i)
                    colItem.SortExpression = ListHeaderDataFieldArray(i)
                    colItem.ItemStyle.Width = New Unit(RowChildWidth)
                    GridviewChild.Columns.Add(colItem)
                ElseIf ListHeaderTextArray(i) = "Signing Group" Then
                    Dim colItem As TemplateField = New TemplateField
                    colItem.HeaderText = ListHeaderTextArray(i)
                    'colItem.DataField = ListHeaderDataFieldArray(i)
                    colItem.SortExpression = ListHeaderDataFieldArray(i)
                    colItem.ItemStyle.Width = New Unit(RowChildWidth)
                    GridviewChild.Columns.Add(colItem)
                Else
                    Dim colItem As BoundField = New BoundField
                    colItem.HeaderText = ListHeaderTextArray(i)
                    colItem.DataField = ListHeaderDataFieldArray(i)
                    colItem.SortExpression = ListHeaderDataFieldArray(i)
                    colItem.ItemStyle.Width = New Unit(RowChildWidth)
                    GridviewChild.Columns.Add(colItem)
                End If
            End If

2) Adding Controls to the GridView Columns in "RowDataBound" event.

 Protected Sub GridviewChild_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridviewChild.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow AndAlso Not String.IsNullOrEmpty(CRMSignCond) Then
            Dim s As String = ""
            Dim lbValue As Label = DirectCast(e.Row.Cells(5).FindControl("lbValue"), Label)
            e.Row.Cells(5).Attributes.Add("onmousemove", "Show('" + lbValue.Text + "')")
            e.Row.Cells(5).Attributes.Add("onmouseout", "this.style.backgroundColor=this.oldcolor;Hide();")
        End If
        Dim cbTargetSign As New CheckBox
        Dim rbConsolidate As New RadioButton
        Dim tbSignGrp As New TextBox
        cbTargetSign.ID = "chkSelect"
        cbTargetSign.AutoPostBack = True
        rbConsolidate.ID = "rbConsolidate"
        tbSignGrp.ID = "tbConsolidate"

        tbSignGrp.Width = 25
        If Not e.Row.RowIndex = -1 Then
            e.Row.Cells(6).Controls.Add(cbTargetSign)
            e.Row.Cells(4).Controls.Add(tbSignGrp)
            For i As Integer = 0 To 1
                rbConsolidate = New RadioButton()
                If i = 0 Then
                    rbConsolidate.Text = "YES"
                Else
                    rbConsolidate.Text = "NO"
                End If
                'ii.Location = New Point(20, tt)
                'ii.Tag = fileArray(i)
                'tt = tt + 20
                rbConsolidate.GroupName = "Consolidate"
                e.Row.Cells(7).Controls.Add(rbConsolidate)
            Next
        End If
    End Sub

Regards, VK

Upvotes: 0

Views: 507

Answers (1)

VDWWD
VDWWD

Reputation: 35514

You are adding and binding events programmatically in code behind and adding them to the GridView. And since dynamic Controls need to be recreated on every time the page is loaded to function properly, you should make sure the RowDataBound event is triggered on every Page Load, and that includes a PostBack.

So I'm guessing you do this (like you would normally):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    If Not Page.IsPostBack Then
        GridView1.DataSource = mySource
        GridView1.DataBind
    End If        
End Sub

Change it to

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    GridView1.DataSource = mySource
    GridView1.DataBind      
End Sub

Upvotes: 1

Related Questions