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)row为空 - 网格中没有 SelectedRow
b)row.Cells为空,所选行没有单元格
c)row.Cells[3]为空,所选行有单元格,但没有单元格 4(单元格从零开始)

没有比这更进一步的帮助你的方法了,你应该在失败的行上设置一个断点,并检查上面的 3 个案例中的每一个,看看哪个是空的

于 2012-08-09T14:33:28.997 回答
0

几个选项,取决于您绑定项目的方式。您可以这样做: Row.Cells["NAMEOFBINDING"] 这将为您提供价值。您现在可能会看到许多隐藏的单元格。

您可能还想尝试不同的事件,例如“RowUpdated”。此外,请尝试查看您的事件参数,看看它是否有任何对您有用的信息。

如果一个小时内没有让你满意的答案,我会写一个代码示例。

于 2012-08-09T14:30:52.603 回答