3

RowUpdatingメソッドに問題があります。私GridViewはローカルの SQL Server に接続されており、データを更新しようとしています。RowUpdatingMSDN のメソッドのコードを次に示します。

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: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

4

3 に答える 3

3

このコードを一度試してください。

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();
}
于 2012-07-12T07:11:02.183 に答える
2
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();
}
于 2013-10-11T07:57:18.207 に答える
2

すべての GridViewRow に DataItem があるわけではありません。

コードの周りにブロックを追加し、if更新される行のタイプが であることを確認する必要がありますDataRow

if (e.Row.RowType == DataControlRowType.DataRow)
{
     your code here...
}

RowTypes に関する詳細: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewrow.rowtype.aspx

于 2012-07-11T17:18:48.400 に答える