我正在尝试使用以下代码在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未被用户代码处理”。谁能告诉我我做错了什么?
祝你好运
答案 0 :(得分:1)
每一行看起来像这样:
sqlComm.Parameters["@Username"].Value = Username;
要求该参数实际存在于命令对象上,但您已将这些行注释掉。放回其中一个:
sqlComm.Parameters.Add("@Username", SqlDbType.Text);
为每个参数设置值。
在评论后编辑
基于此行导致NullReferenceException
:
string Username = row.Cells[3].Text;
我可以说cetain要么
a)row
为空 - 网格中没有SelectedRow
b)row.Cells
为空,所选行没有单元格
c)row.Cells[3]
为空,所选行包含单元格,但没有单元格4(单元格基于零)
除此之外没有办法帮助你,你应该在失败的行上设置一个断点并检查上面3个案例中的每个案例,看看哪个是空的
答案 1 :(得分:0)
有两个选项,具体取决于您绑定项目的方式。 你可以这样做: Row.Cells [“NAMEOFBINDING”],这将为您提供价值。 您现在可以看到许多隐藏的单元格。
您可能也想尝试其他活动,例如“RowUpdated” 此外,尝试查看您的事件参数,看看它是否有任何多汁的信息。
如果你在一小时内没有得到满意的回答,我会写一个代码样本。