书上写的在UpdateCommand事件处理中用((TextBox)e.Item.Cells[1].Controls[0]).Text得到修改后的值,但是我用的时候跟踪发现取到的是“原来的值”,用e.Item.Cells[1].Text取得的也是原值,希望大家帮忙分析
<asp:DataGrid id="dg" runat="server" AutoGenerateColumns="False">
  <Columns>
    <asp:BoundColumn DataField="id" ReadOnly="True" HeaderText="标识"></asp:BoundColumn>
    <asp:BoundColumn DataField="title" HeaderText="标题"></asp:BoundColumn>
    <asp:BoundColumn DataField="url" HeaderText="地址"></asp:BoundColumn>
    <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
    <asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
  </Columns>
</asp:DataGrid>

解决方案 »

  1.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    //加载数据库连接配置
    string sqlServerName=ConfigurationSettings.AppSettings["SqlServerName"];
    string uid=ConfigurationSettings.AppSettings["uid"];
    string pws=ConfigurationSettings.AppSettings["pws"];
    string dbname=ConfigurationSettings.AppSettings["DBName"];
    string strConn="server="+sqlServerName+";uid="+uid+";pwd="+pws+";database="+dbname;
    sqlConn.ConnectionString=strConn;

    string lrow="";
    if(this.IsPostBack)
    {
    lrow=crow.Value;
    }
    else
    {
    lrow=Request.Form["crow"].ToString();
    crow.Value=lrow;
    }
    //检验row有效性
    if (lrow==null || lrow.Equals("")) 
    {
    Response.Redirect("first.aspx");
    }


    try
    {
    sqlConn.Open();
    }
    catch
    {
    Response.Write("数据库打开错误,请检查数据库服务器是否正常运行;");
    } string sql="SELECT * FROM [TitleInfo] where cid="+lrow.ToString();

    try
    {
    SqlDataAdapter sda=new SqlDataAdapter(sql,sqlConn);
    DataSet ds=new DataSet();
    sda.Fill(ds,"Title");
    DataTable dt=ds.Tables["Title"];

    dg.DataSource=ds.Tables["Title"].DefaultView;
    dg.DataBind();
    }
    catch
    {
    Response.Write("数据库操作出错了!");
    }
    sqlConn.Close();
    }
    private void dg_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    dg.EditItemIndex=(int)e.Item.ItemIndex;
    dg.DataBind();
    }
    private void dg_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    string ltitle,lurl;
    int len,curLen;
    string sql;
    ltitle=((TextBox)e.Item.Cells[1].Controls[0]).Text;
    //string title=e.Item.Cells[1].Text;
    lurl=((TextBox)e.Item.Cells[2].Controls[0]).Text;
    //int id=e.Item.ItemIndex;//得到当前行
    string id=e.Item.Cells[0].Text;//得到当前行的某个值 try
    {
    sqlConn.Open();
    }
    catch
    {
    Response.Write("数据库打开错误,请检查数据库服务器是否正常运行;");
    } SqlCommand sqlComm=new SqlCommand();
    sqlComm.Connection=sqlConn;
    try
    {
    sql="update [TitleInfo] set title='"+ltitle+"',url='"+lurl+"' where id="+id;
    sqlComm.CommandText=sql;
    sqlComm.ExecuteNonQuery();
    hint.Text="修改成功";
    dg.EditItemIndex=-1;
    }
    catch
    {
    hint.Text="修改不成功,对数据库操作产生错误;";
    }

    sqlConn.Close();
    }
      

  2.   

    更新后EditItemIndex置-1
    再次绑定数据到DataGrid
    你应该把绑定数据那部分写成一个方法在很多地方都要用的,比如编辑,分页后
      

  3.   

    OK,我已经解决了,在pageload事件里加载数据并且刷新所致,只要判断是在编辑状态就不刷新就可以了,谢谢二楼的帮助