以前也一直用过datagrid的编辑功能也没有出现过这个错误,这次用了发现在点击完“编辑”后传递给dgColumn_UpdateCommand()值是最初原始的,不是修改守的数据,如将名字从11更改成22,但传给updatecommand()还是11。查了半天没有找到原因。恳请哪位大侠指点一下!在线等待!private void dgColumn_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
   string strName = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
   string strSeq_id = ((TextBox)e.Item.Cells[2].Controls[0]).Text;

   OleDbConnection objConn = new OleDbConnection(strConn);
   string strSQL_U = "Update class Set name='" + strName + "',seq_id = " + Int32.Parse(strSeq_id) + " where id =" + Int32.Parse(dgColumn.DataKeys[e.Item.ItemIndex].ToString());  OleDbCommand objComm = new OleDbCommand(strSQL_U,objConn);
  objConn.Open();
  objComm.ExecuteNonQuery();
  objConn.Close();
  dgColumn.EditItemIndex = -1;
  BindGrid();
}private void BindGrid()
{
strSQL = "SELECT id,name,seq_id FROM class order by seq_id";
OleDbConnection objConn = new OleDbConnection(strConn);
OleDbCommand objComm = new OleDbCommand(strSQL,objConn);
objConn.Open();
OleDbDataReader dr = null;
dr = objComm.ExecuteReader();
dgColumn.DataSource = dr;
dgColumn.DataKeyField = "id";
dgColumn.DataBind();
dr.Close();
objConn.Close();
}
datagrid的属性如下:<asp:datagrid id="dgColumn" runat="server" Width="100%" ShowHeader="True" AutoGenerateColumns="False" CellPadding="1" EditItemStyle-Wrap="False" BorderColor="#404040">
<EditItemStyle Wrap="False"></EditItemStyle>
<HeaderStyle Font-Bold="True" Wrap="False" HorizontalAlign="Center" ForeColor="#004040" VerticalAlign="Middle" BackColor="OldLace"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="id" HeaderText="ID" ReadOnly="True"></asp:BoundColumn>
<asp:BoundColumn DataField="name" HeaderText="栏目名称" ReadOnly="False"></asp:BoundColumn>
<asp:BoundColumn DataField="seq_id" HeaderText="排列序号" ReadOnly="False"></asp:BoundColumn>
<asp:EditCommandColumn HeaderText="修改" ButtonType="LinkButton" UpdateText="修改" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
<asp:ButtonColumn HeaderText="删除" Text="删除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:datagrid>

解决方案 »

  1.   

    name是access的关键字,SQL语句要这样写
    string strSQL_U = "Update class Set [name]='" + strName + "',seq_id = " + Int32.Parse(strSeq_id) + " where id =" + Int32.Parse(dgColumn.DataKeys[e.Item.ItemIndex].ToString());
      

  2.   

    找到原因了,是因为我没有将BindGrid()放入到if(!page.ispostback)中,所以造成更新提交后还是原来的BindGrid(),所以数据没有被修改。谢谢你的帮助,name好像不是保留字。
      

  3.   

    这个得看你 的page_load事件里面有关datagrid绑定的代码是否写在 了 if(!IsPostBack)里面了?