1

gridviewからSQLサーバーデータベースにデータを挿入/更新しているときに、 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。誰でも助けてください。

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行:109

4

3 に答える 3

1

エラーメッセージはtastore109null行目にあることを意味するためtastore、初期化する必要があります。tastoreInsert関数ヘッダーと本文に書き込むことで混乱しtastore.Insertました。

編集:申し訳ありませんが、3つのテキストボックスのいずれも存在しないことを意味している可能性もあります。コントロールが見つからない場合、FindControlはnullを返すため、それらも調べる必要があります。デバッグ!

于 2012-04-24T07:12:22.437 に答える
1

nullオブジェクトのTextプロパティにアクセスすると、FindControlは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> 
于 2012-04-24T07:28:41.353 に答える
0

自動的に空の文字列Convert.ToString(txtNewNameTb.Text)
に変換して使用します。NULL

次のようにしてみてください:-

tastore.Insert(Convert.ToString(txtNewName.Text),Convert.ToString( txtNewContact.Text), Convert.ToString(txtNewAddress.Text));
于 2012-04-24T07:41:14.193 に答える