从GridView Footer行访问动态添加的控件

时间:2010-05-11 14:48:32

标签: asp.net vb.net gridview

我的asp.net页面中有GridView控件,带有自动生成的字段 在asp:TemplateField下只有页脚模板。

我可以将此gridview与任何数据表表绑定,具体取决于用户 选择。现在想在数据库中添加新记录,这样我就添加了文本 运行时页脚模板单元格上的框取决于列数 桌子上。但是当我从页脚模板访问这些文本框时 在gridview_RowCommand事件中它没有重新启动文本框控件。

这是代码:

   SGridView.ShowFooter = True
    For i As Integer = 0 To ctrList.Count
        Dim ctr As Control = CType(ctrList.Item(i), Control)
        SGridView.FooterRow.Cells(i + 1).Controls.Add(ctr)
    Next

ctrList包含Controls textBox,checkbox dropdowlist等。

一切都好

但是当我不知道控件的文本或值或检查值时,我无法在rowcommand事件中强制转换控件

以下是代码:

如果e.CommandName =“Add”那么

    Dim ctrList As ControlCollection = SGridView.FooterRow.Controls

    For Each ctr As Control In ctrList

        If TypeOf ctr Is TextBox Then
            Dim name As TextBox = CType(ctr, TextBox)
            Dim val As String = name.Text
        End If
    Next
End If

此示例适用于textBox控件。

请告诉我如何获取页脚控制文本框。这样我就可以了 将数据保存在数据库中。

2 个答案:

答案 0 :(得分:3)

当您处理动态控件时,您必须密切关注。网页生命周期。

控制数据绑定在Load事件中,因此当您在Load事件中执行控制生成时,您无法访问该事件中的回发数据。我通常尝试在页面的Init中创建动态控件,并对LoadComplete或PreRender事件执行任何值处理,这样我就可以确保他们在您尝试读取它们之前已经从回发中接收了它们的值。

查看ASP.NET page lifecycle事件的完整描述以及最新进展。这应该可以帮助您导航动态生成控件的创建和使用。

答案 1 :(得分:2)

尝试在Grdiview的RowCreated事件中创建控件,该事件将在每次回发时生成。

Private Sub Grid1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Grid1.RowCreated
      Select Case e.Row.RowType
          Case DataControlRowType.Footer
          'add controls to row
      End Select
  End Sub