我在使用
RowUpdating
方法时遇到问题。我的 GridView
已连接到本地 SQL Server,我正在尝试更新数据。以下是来自 MSDN 的 RowUpdating
方法的代码。
protected void TaskGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = (DataTable)Session["TaskTable"];
//Update the values.
GridViewRow row = GridView1.Rows[e.RowIndex];
dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;
//Reset the edit index.
GridView1.EditIndex = -1;
//Bind data to the GridView control.
BindData();
}
我收到此错误:
System.NullReferenceException:未将对象引用设置为对象的实例。
尝试此代码一次。
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
int id = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
TextBox tname = (TextBox)row.FindControl("nam");
TextBox tques = (TextBox)row.FindControl("que");
MySqlCommand cmd = new MySqlCommand("update exam set name1=@name,ques=@ques where id = @id", con);
cmd.Parameters.Add("@id", MySqlDbType.Int16).Value = id;
cmd.Parameters.Add("@name", MySqlDbType.VarChar, 30).Value = tname.Text.Trim();
cmd.Parameters.Add("@ques", MySqlDbType.VarChar,40).Value = tques.Text.Trim();
con.Open();
cmd.ExecuteNonQuery();
GridView1.EditIndex = -1;
bind();
}
并非所有 GridViewRow 都有 DataItem。
您应该在代码周围添加一个
if
块,并验证正在更新的行的类型为 DataRow
。
if (e.Row.RowType == DataControlRowType.DataRow)
{
your code here...
}
有关 RowType 的更多信息:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewrow.rowtype.aspx
public void bindGvEdit()
{
GridView1.DataSource = obj1.SelectAlltbl();
GridView1.DataBind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bindGvEdit();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bindGvEdit();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
obj1.Id = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
obj1.Name = ((TextBox)row.Cells[1].Controls[1]).Text;
obj1.Description = ((TextBox)row.Cells[2].Controls[1]).Text;
obj1.Updatetbl();
GridView1.EditIndex = -1;
bindGvEdit();
}
protected void GridView1_RowUpdating(对象发送者,GridViewUpdateEventArgs e) { DataRow[] dr = dt.Select("id=" + Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[0].Text)); dr[0][1] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0]).Text; dr[0][2] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0]).Text; dr[0][3] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text; dr[0][4] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text; dr[0][5] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[5].Controls[0]).Text; dr[0][6] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[6].Controls[0]).Text; dr[0][7] = ((TextBox)GridView1.Rows[e.RowIndex].Cells[7].Controls[0]).Text; adp.Update(dt); 展示(); }
我收到此错误 - System.FormatException:“输入字符串的格式不正确。”