Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net GridView错误:对象引用未设置为对象的实例_Asp.net_Vb.net_Data Binding_Gridview_Drop Down Menu - Fatal编程技术网

Asp.net GridView错误:对象引用未设置为对象的实例

Asp.net GridView错误:对象引用未设置为对象的实例,asp.net,vb.net,data-binding,gridview,drop-down-menu,Asp.net,Vb.net,Data Binding,Gridview,Drop Down Menu,有一个带有模板字段的gridview,其中一列包含一个dropdownlist,应该用sql语句填充它。我已经动态创建了网格并调用了rowdatabound以访问dropdownlist,但我一直收到错误:Object reference未设置为对象的实例。有人有什么想法吗 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <a

有一个带有模板字段的gridview,其中一列包含一个dropdownlist,应该用sql语句填充它。我已经动态创建了网格并调用了rowdatabound以访问dropdownlist,但我一直收到错误:Object reference未设置为对象的实例。有人有什么想法吗

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:CommandField EditText="Add" ShowEditButton="True" />
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" />                          
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:TextBox ID="TextBox2" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>        
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList2" runat="server" />        
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label4" runat="server" />
            </ItemTemplate>
            </asp:TemplateField>
        <asp:TemplateField>        
            <EditItemTemplate>
                <asp:TextBox ID="TextBox3" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label5" runat="server" />        
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:Label ID="Label6" runat="server" />
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label7" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
最后是RowDataBound事件处理程序代码:

Dim ddl As DropDownList = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList)
    If ddl Is Nothing Then
        result = dbConnect(dbType.SqlServer, ConfigurationManager.AppSettings("SQLServerConnection"))
        If result = "Successful" Then
            dt = FillDataTable(dbType.SqlServer, "SELECT V_VendorNo + ' | ' + V_VendorName FROM VendorTbl")
            ddl.DataSource = dt 'it errors out here'
            ddl.DataTextField = "V_VendorNo"
            ddl.DataValueField = "V_VendorName"
            ddl.DataBind()
        End If
    End If

在绑定RowDatabound事件中的数据之前,是否检查Datarow的行类型?如果没有,请检查它….

如果ddl为Nothing,那么这是键入错误吗,看到你的代码,这应该是
如果ddl不是什么,那么
@Steve不,如果我把它当作ddl不是什么,那么这不是一个锥虫错误,它跳过了中间的所有内容,并直接转到If结尾。然后,当你什么都不尝试时,你会得到“对象引用错误”。DataSource=dt。我明白了。。。有关于如何修复的建议吗?不确定,代码似乎是正确的。如果e.Row.RowType=DataControlRowType.DataRow,请尝试将此行置于FindControl行之前,然后
,当然,请将
中的
为无
中的
为无
是。我首先检查行类型,然后它会一直到最后,如果然后请检查您是否正在填充数据表,即(datatable.rows.count应该>0)…这可能会给您带来问题。。。
Dim ddl As DropDownList = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList)
    If ddl Is Nothing Then
        result = dbConnect(dbType.SqlServer, ConfigurationManager.AppSettings("SQLServerConnection"))
        If result = "Successful" Then
            dt = FillDataTable(dbType.SqlServer, "SELECT V_VendorNo + ' | ' + V_VendorName FROM VendorTbl")
            ddl.DataSource = dt 'it errors out here'
            ddl.DataTextField = "V_VendorNo"
            ddl.DataValueField = "V_VendorName"
            ddl.DataBind()
        End If
    End If