在用户定义的函数中查找嵌套的gridview

时间:2013-07-22 16:31:18

标签: asp.net vb.net

我在使用我定义的函数填充子gridview时遇到问题。我不断收到错误“对象引用未设置为对象的实例”。我究竟做错了什么?我是否错误地使用了FindControl功能?它似乎没有找到子gridview。

Sub RecordsByZip()
        Dim DBConn As New SqlConnection(Application("DBConn"))
        Dim gv1 As GridView
        gv1 = grdTotal

        Dim gv2 As GridView
        gv2 = DirectCast(gv1.FindControl("grdChild"), GridView)

        Dim ZipCode = lbZip.SelectedItem
        For Each ZipCode In lbZip.Items
            If ZipCode.Selected = True Then

                Dim cmdZip As SqlCommand = New SqlCommand("spPICAInsertTotals2", DBConn)
                cmdZip.CommandType = CommandType.StoredProcedure

                strZip = ZipCode.Text
                strUser = Session("User")

                Dim Zip As New SqlParameter("@Zip", SqlDbType.VarChar)
                Zip.Value = strZip
                cmdZip.Parameters.Add(Zip)

                Dim UserID As New SqlParameter("@UserID", SqlDbType.Int)
                UserID.Value = strUser
                cmdZip.Parameters.Add(UserID)

                DBConn.Open()
                gv1.DataSource = cmdZip.ExecuteReader
                gv1.DataBind()
                gv1.Visible = True
                DBConn.Close()
            End If
        Next
        btnExport.Visible = True
        lblmsg.Visible = False



        ' Dim DBConn = New SqlConnection(Application("DBConn"))
        Dim cmdCounty As SqlCommand = New SqlCommand("spPICAInsertTotals", DBConn)
        cmdCounty.CommandType = CommandType.StoredProcedure
        'Dim gv As GridView = TryCast(e.Row.FindControl("grdChild"), GridView)

        strUser = Session("User")

        Dim UserID2 As New SqlParameter("@UserID", SqlDbType.Int)
        UserID2.Value = strUser
        cmdCounty.Parameters.Add(UserID2)

        DBConn.Open()
        gv2.DataSource = cmdCounty.ExecuteReader
        gv2.DataBind()
        gv2.Visible = True
        DBConn.Close()
        btnExport.Visible = True
        lblmsg.Visible = False
        lblInstructions.Visible = False


    End Sub

1 个答案:

答案 0 :(得分:0)

首先。 。

就像免责声明一样,我通常使用转发器控件而不是gridview控件。

但这可能会对你有所帮助。 。

我可以告诉你,使用转发器控件,如果你想找到一个嵌套的转发器,那么你必须在它们所属的父转发器的项目内查找它们。基本上,你正在尝试用上面的代码做的是找到grdChild,当实际上可能有几个grdChild(毕竟它是一个嵌套的gridview)。我愿意打赌这是你发现对象引用错误的地方。

换句话说,如果您想要找到ID为nestedRepeater的嵌套转发器,并且您知道它位于主转发器的第一项(在这种情况下,我已分配给{ {1}}变量),你可以这样做:

myRepeater

使用SqlDataAdapter和DataSet(推荐)

Dim myItem as RepeaterItem = myRepeater.Items(0)
Dim Rep2 as Repeater = myItem.FindControl("nestedRepeater")

使用SqlDataReader和DataTable

根据您的评论,当您将gridview分配给cmd.ExecuteReader时,您的代码就会中断。

您需要使用以下方法访问您的数据:

Dim sa As New SqlDataAdapter(cmdCounty) 'Initialize the SqlDataAdapter and assign the SqlCommand object to it.
Dim ds As New DataSet() 'Initialize the DataSet (we will bind this to the gridview)

Try 'The Try/Catch statements help you to handle errors.
    cmdCounty.Connection.Open() 'Open the connection to the database.
    sa.Fill(ds) 'This statement uses the SqlDataAdapter to easily execute the SqlCommand (using the query specified in the SqlCommand object) and . . . 
                '. . .use that data to fill our dataset.
    cmdCounty.Connection.Close() 'These statement close the connection and dispose of the SqlCommand object. Note: You may only need the dispose command.
    cmdCounty.Dispose()

Catch ex As Exception
    'Catch your error here.
    cmdCounty.Connection.Close()
    cmdCounty.Dispose()
End Try

gv2.DataSource = ds 'Set the datasource for your GridView control.
gv2.DataBind() 'Bind the data.

这两个示例都假设您已经创建了SqlCommand对象,并为其分配了一个有效的SQL查询字符串和Connection对象。