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