从gridview将数据插入/更新到sql server数据库时,我收到“对象引用未设置为对象的实例”错误。有人请帮忙。
protected void GridAllStore_RowCommand(object sender, GridViewCommandEventArgs e)
{
storelocatorDataSetTableAdapters.storedbTableAdapter tastoreInsert = new storelocatorDataSetTableAdapters.storedbTableAdapter();
if (e.CommandName.Equals("Insert"))
{
TextBox txtNewName = new TextBox();
TextBox txtNewContact = new TextBox();
TextBox txtNewAddress = new TextBox();
txtNewName = (TextBox)GridAllStore.FooterRow.FindControl("txtNewName");
txtNewContact = (TextBox)GridAllStore.FooterRow.FindControl("txtNewContact");
txtNewAddress = (TextBox)GridAllStore.FooterRow.FindControl("txtNewAddress");
tastore.Insert(txtNewName.Text, txtNewContact.Text, txtNewAddress.Text);
FillGrid();
}
}
以下是错误消息:
对象引用未设置为对象的实例。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:
第107行:txtNewContact =(TextBox)GridAllStore.FooterRow.FindControl(“txtNewContact”);
第108行:txtNewAddress =(TextBox)GridAllStore.FooterRow.FindControl(“txtNewAddress”);
第109行:tastore.Insert(txtNewName.Text,txtNewContact.Text,txtNewAddress.Text);
第110行:FillGrid();
第111行:}源文件:C:\ Users \ DELL \ Documents \ Visual Studio 2010 \ Projects \ WebApplication1 \ WebApplication1 \ AdminPanel.aspx.cs Line:109
答案 0 :(得分:1)
错误消息表示第109行中的tastore
为null
,因此需要初始化tastore
。您通过在函数标题中编写tastoreInsert
并在正文中编写tastore.Insert
来混淆自己。
编辑:抱歉,这也可能意味着三个文本框中的任何一个都不存在。如果找不到控件,FindControl将返回null,因此您还需要查看它们。调试!
答案 1 :(得分:1)
FindControl可以返回null,当你访问Text属性时会抛出null对象异常。您可以在访问Text属性之前检查null。
var txtNewNameTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewName");
var txtNewContactTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewContact");
var txtNewAddressTb = (TextBox)GridAllStore.FooterRow.FindControl("txtNewAddress");
if (txtNewNameTb == null || txtNewContactTb == null || txtNewAddressTb == null) { return; }
if(tastore == null) { return; }
tastore.Insert(txtNewNameTb.Text, txtNewContactTb.Text, txtNewAddressTb.Text);
FillGrid();
在你的ASPX FooterTemplate中应该有3个文本框,如下所示。
<FooterTemplate>
<asp:TextBox ID="txtNewName" runat="server" >
</asp:TextBox>
<asp:TextBox ID="txtNewContact" runat="server" >
</asp:TextBox>
<asp:TextBox ID="txtNewAddress" runat="server" >
</asp:TextBox>
</FooterTemplate>
答案 2 :(得分:0)
使用Convert.ToString(txtNewNameTb.Text)
它会自动将NULL
转换为空字符串。
尝试: -
tastore.Insert(Convert.ToString(txtNewName.Text),Convert.ToString( txtNewContact.Text), Convert.ToString(txtNewAddress.Text));