0

次のコードを使用して、GridView で値を取得しようとしています。

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = GridView1.SelectedRow;
    string Username = row.Cells[3].Text;
    string Password = row.Cells[4].Text;
    string Email = row.Cells[5].Text;
    string ID_Inscricao = row.Cells[1].Text;
    SqlConnection sqlConn = new SqlConnection(
        ConfigurationManager.ConnectionStrings["FormacaoConnectionString"].ToString());
    SqlCommand sqlComm = new SqlCommand();

    sqlComm = sqlConn.CreateCommand();
    sqlComm.Parameters.Add("@Username", SqlDbType.Text);
    sqlComm.Parameters.Add("@Password", SqlDbType.Text);
    sqlComm.Parameters.Add("@Email", SqlDbType.Text);
    sqlComm.Parameters.Add("@ID_Inscricao", SqlDbType.Text);

    sqlComm.Parameters["@Username"].Value = Username;
    sqlComm.Parameters["@Password"].Value = Password;
    sqlComm.Parameters["@Email"].Value = Email;
    sqlComm.Parameters["@ID_Inscricao"].Value = ID_Inscricao;
    string sql = "INSERT INTO Utilizadores " +
        "(Username, Password, Email,ID_Inscricao) " +
        "VALUES (@Username, @Password, @Email, @ID_Inscricao)";
    sqlComm.CommandText = sql;
    sqlConn.Open();
    sqlComm.ExecuteNonQuery();
    sqlConn.Close();
}

したがって、問題は、GridView から値を取得できないことですが、代わりに「NullReferenceException はユーザー コードによって処理されませんでした」というメッセージが表示されます。誰が私が間違っているのか教えてもらえますか?

よろしくお願いします

4

2 に答える 2

1

このように見える各行:

sqlComm.Parameters["@Username"].Value = Username;

そのパラメータが実際にコマンドオブジェクトに存在する必要がありますが、これらの行はコメントアウトされています。次のいずれかに戻します。

sqlComm.Parameters.Add("@Username", SqlDbType.Text);

値を設定しているすべてのパラメーターについて。


コメント後に編集

この行が:を引き起こすという事実に基づいていNullReferenceExceptionます

string Username = row.Cells[3].Text;

私は確かにどちらかを言うことができます

a)rownull-グリッドにSelectedRowがありません
b)row.Cellsnull、選択された行にセルがありません
c)row.Cells[3]null、選択された行にセルがありますが、セル4はありません(セルはゼロベースです)

それ以上の手助けをする方法はありません。失敗している行にブレークポイントを設定し、上記の3つのケースのそれぞれを調べて、どれがnullであるかを確認する必要があります。

于 2012-08-09T14:33:28.997 に答える
0

アイテムをバインドする方法に応じて、いくつかのオプションがあります。Row.Cells["NAMEOFBINDING"] を実行すると、値が取得されます。あなたが今見るかもしれない多くの隠れた細胞があります。

「RowUpdated」などの別のイベントも試してみてください。また、イベント引数を調べて、有益な情報があるかどうかを確認してください。

1 時間以内に満足のいく回答が得られない場合は、コード サンプルを作成します。

于 2012-08-09T14:30:52.603 に答える