如何访问动态创建的控件 [英] How to Access Dynamically Created Cotrols

查看:59
本文介绍了如何访问动态创建的控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经动态创建了一个带有模板字段的GridView. .问题是我想访问那些动态创建的控件,但是当我说找到控件时,就会给它NUllEXCEPTIONERROR错误对象引用未设置为对象的实例."

Hi i Have Created A GridView with Template Fields Dynamically. . The Problem is I Want to Acces those Dynamically Created Controls but when i Say Find Control its Giving NUllEXCEPTIONERROR error "Object reference not set to an instance of an object."

For i = 0 To AuthorsGridView.Rows.Count - 1
           Dim txt As TextBox = AuthorsGridView.Rows(i).Cells(0).FindControl("firstName")
           '' Error Run Time
           txt.Text = ""
           If txt.Text = "SomeValue" Then
               'txt.ForeColor = Drawing.Color.Red
               txt.Font.Bold = True
           Else
               txt.Font.Italic = True
           End If
       Next i



请帮我一个忙



Plz Help me Out

推荐答案

您确定它不叫做名字"吗?控件ID区分大小写.
Are you sure it''s not called "FirstName"? Control IDs are case-sensitive.


@ Shreekar

@ Shreekar

' Here my Code is

Public Class GridViewTemplate
        Implements ITemplate

        Private templateType As DataControlRowType
        Private columnName As String

        Sub New(ByVal type As DataControlRowType, ByVal colname As String)

            templateType = type
            columnName = colname

        End Sub

        Sub InstantiateIn(ByVal container As System.Web.UI.Control) _
          Implements ITemplate.InstantiateIn

            ' Create the content for the different row types.
            Select Case templateType
                Case DataControlRowType.Header
                    ' Create the controls to put in the header 
                    ' section and set their properties. 
                    Dim lc As New Literal
                    lc.Text = " " & UCase(columnName) & ""
                    ' Add the controls to the Controls collection
                    ' of the container. 
                    container.Controls.Add(lc)

                Case DataControlRowType.DataRow
                    ' Create the controls to put in a data row
                    ' section and set their properties.
                    Dim firstName As New TextBox  
                    firstName = New TextBox
                    Dim lastName As New Label
                    firstName.ID = "txtFName"

                    Dim spacer = New Literal
                    spacer.Text = "--"

                    ' To support data binding, register the event-handling methods
                    ' to perform the data binding. Each control needs its own event
                    ' handler.
                    AddHandler firstName.DataBinding, AddressOf FirstName_DataBinding
                    AddHandler lastName.DataBinding, AddressOf LastName_DataBinding
                    lastName.Visible = False
                    ' Add the controls to the Controls collection
                    ' of the container.
                    container.Controls.Add(firstName)
                    container.Controls.Add(spacer)
                    container.Controls.Add(lastName)

                    ' Insert cases to create the content for the other 
                    ' row types, if desired.

                Case Else

                    ' Insert code to handle unexpected values. 

            End Select

        End Sub

        Private Sub FirstName_DataBinding(ByVal sender As Object, ByVal e As EventArgs)

            ' Get the Label control to bind the value. The Label control
            ' is contained in the object that raised the DataBinding 
            ' event (the sender parameter).
            Dim l As TextBox = CType(sender, TextBox)

            ' Get the GridViewRow object that contains the Label control. 
            Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)

            ' Get the field value from the GridViewRow object and 
            ' assign it to the Text property of the Label control.
            l.Text = DataBinder.Eval(row.DataItem, "Doctor_Name").ToString()

        End Sub

        Private Sub LastName_DataBinding(ByVal sender As Object, ByVal e As EventArgs)

            ' Get the Label control to bind the value. The Label control
            ' is contained in the object that raised the DataBinding 
            ' event (the sender parameter).
            Dim l As Label = CType(sender, Label)

            ' Get the GridViewRow object that contains the Label control.
            Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)

            ' Get the field value from the GridViewRow object and 
            ' assign it to the Text property of the Label control.
            l.Text = DataBinder.Eval(row.DataItem, "SlNo").ToString()

        End Sub

    End Class

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Label1.Text = "Entered"
        Dim dt As DataTable
        Dim dr As DataRow
        dt = New DataTable()
        dt.Columns.Add(New DataColumn("Doctor_Name"))
        dt.Columns.Add(New DataColumn("SlNo"))
        dr = dt.NewRow()
        dr("Doctor_Name") = "Val1"
        dr("Slno") = "1001"
        dt.Rows.Add(dr)
        Label1.Text = "1 add"
        dr = dt.NewRow()
        dr("Doctor_Name") = "Val2"
        dr("Slno") = "1002"
        dt.Rows.Add(dr)
        Label1.Text = "2 add"
        dr = dt.NewRow()
        dr("Doctor_Name") = "Val3"
        dr("Slno") = "1003"
        dt.Rows.Add(dr)

        dr = dt.NewRow()
        dr("Doctor_Name") = "val4"
        dr("Slno") = "1004"
        dt.Rows.Add(dr)
        Label1.Text = "4 add"

        Dim customField As New TemplateField
        Dim CustomField1 As New TemplateField
        ' Create the dynamic templates and assign them to
        ' the appropriate template property.
        customField.ItemTemplate = New GridViewTemplate(DataControlRowType.DataRow, "Author Name")
        customField.HeaderTemplate = New GridViewTemplate(DataControlRowType.Header, "Employees")
        'CustomField1.ItemTemplate = New GridViewTemplate(DataControlRowType.DataRow, "Author Name 2")
        'CustomField1.HeaderTemplate = New GridViewTemplate(DataControlRowType.Header, "Author Name 2")
        ' Add the field column to the Columns collection of the
        ' GridView control.
        AuthorsGridView.Columns.Add(customField)
        'AuthorsGridView.Columns.Add(CustomField1)
        AuthorsGridView.DataSource = dt
        Label1.Text = " DataSource Set"
        AuthorsGridView.DataBind()
        ViewState("table") = dt
        Label1.Text = "Binded"
' Here This Code Works it Shows Me the Value I Can Access it But Out side this Fun i Cant Access all Controls just Goes of
        For i = 0 To AuthorsGridView.Rows.Count - 1
            Dim txt As TextBox = AuthorsGridView.Rows(i).Cells(0).FindControl("txtFName")
            '' Error Run Time
            'txt.Text = ""
            Label1.Text = txt.Text
            If txt.Text = "VAl2" Then
                'txt.ForeColor = Drawing.Color.Red
                txt.Font.Bold = True
            Else
                txt.Font.Italic = True
            End If

        Next
    End Sub

' Here on Other Control  click i want to Access it But its Not Happening
    Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click


        Dim dt As DataTable
        dt = ViewState("table")
        'AuthorsGridView.Columns.Add(CustomField1)
        AuthorsGridView.DataSource = dt
        'Label1.Text = " DataSource Set"
        AuthorsGridView.DataBind()
        Label1.Text = AuthorsGridView.Rows.Count
        For i = 0 To AuthorsGridView.Rows.Count - 1
            Dim txt As TextBox = AuthorsGridView.Rows(i).Cells(0).FindControl("txtFName")
            
            Label1.Text = txt.Text
            If txt.Text = "Val2" Then
                
                txt.Font.Bold = True

            Else
                txt.Font.Italic = True
            End If

        Next
    End Sub


这篇关于如何访问动态创建的控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆