我的代码如下:
public partial class _Default : System.Web.UI.Page 
{
    OleDbConnection conn = new OleDbConnection(ConfigurationSettings.AppSettings["conStr"] + System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["dbName"]));
    DataSet ds = new DataSet();     public void dataBd()
    {
        OleDbDataAdapter da = new OleDbDataAdapter("select * from 信息表",conn);
        conn.Open();
        da.Fill(ds,"信息表");
        conn.Close();
        GridView1.DataSource = ds.Tables["信息表"];
        GridView1.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)//此处要与不要都试过,未果
        {
            dataBd();
        }
    }    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        string sqlStr = "update 信息表 set 姓名='" + GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
        Button1.Text = sqlStr;
        if (e.CommandName == "Edit")
        {
             GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
            dataBd();
        }
        if (e.CommandName == "Update")
        {
            OleDbCommand comUd = new OleDbCommand(sqlStr, conn);
            conn.Open();
            comUd.ExecuteNonQuery();
            conn.Close();
            GridView1.EditIndex = -1;
            dataBd();        }
    }
}总是将空值更新进数据库,每次都取不到值,已经困了我快一星期了,请指教!GridView我用自动绑定字段。

解决方案 »

  1.   

    幫頂
    結帖時接點分...只用過datagrid
      

  2.   

    断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text 什么值
      

  3.   

    断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text 
    //////////////////////////////
    我看了,退出编辑前是空值!请帮帮我!
      

  4.   

    断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text
    ---------------------------------------------------------
    点击编辑时取出的是原值,但点击更新时是空值!
      

  5.   

    写到RowEditing事件里面试试是否可以,例如下面这样protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e )
        {
            int index = e.NewEditIndex;
            GridViewRow row = GridView1.Rows[ index ];
            string jobID = Server.HtmlDecode( row.Cells[ 3 ].Text );            }
      

  6.   

    to xyh2002(凌)
        还是取不出来,原来的单元格有值,不做任何改动,只要单击编辑,然后单击更新,值就没有了,看来问题肯定是sql语句的执行发生在页面刷新之后,页面一刷新,原来修改的值就没有了,于是sql就提交了空值到数据库。这到底怎样解决呢?
      

  7.   

    if (!IsPostBack)
            {
                dataBd();
            }
    这可定要的
      

  8.   

    to wlb854(不倒翁)
        是过了,要与不要都不行。各位大虾能不能在你们的机子上帮我调一下,我快要疯了!十分感激!
      

  9.   

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
    if (e.CommandName == "Edit")
    {
    GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
    dataBd();
    }
    if (e.CommandName == "Update")
    {
    string sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();//问题出在这里
    Button1.Text = sqlStr;
    OleDbCommand comUd = new OleDbCommand(sqlStr, conn);
    conn.Open();
    comUd.ExecuteNonQuery();
    conn.Close();
    GridView1.EditIndex = -1;
    dataBd();
    }
    }
      

  10.   

    没用过gridview,帮不了你不过把e.CommandArgument 都改成 e.RowIndex 看看呢
    还有,似乎if (e.CommandName == "Edit")
            {
                 GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
                dataBd();
            }
    里面需要dataBd()吗?这不是把gridview还原了吗?
      

  11.   

    你在EDIT模板里面绑定了吗,如果我猜的没有错,应该是没有。
      

  12.   

    to charles_y(每天上网一小时)
    在该事件中没有e.RowIndex,因为都是区当前行的位置,应该不影响;不用dataBd()绑定的话必须得点两次按钮才能激活编辑事件。
    谢谢您能帮帮解答,请继续关注!
    -----------------------------------------
    to wengnet(西门吹雪)
    我是选择自动填充字段的,这样会有影响吗?请明示!
      

  13.   

    按照Snowdust(雪尘)的提示代码,问题已经解决,我要用10分钟做一下多字段测试,10分钟后结贴。
      

  14.   

    to Snowdust(雪尘) 
    -----------------------
    我将您的提示改为两个字段时(如下)
    sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' and 学号='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
    --------------
    就出现姓名字段更新为随机的0或-1,而不是我输入的值,这是怎么回事?请您继续帮我!请各位大虾继续关注!
      

  15.   

    sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "', 学号='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();你的SQL语句有问题啊!!!!!!!!!!
      

  16.   

    to Snowdust(雪尘):
       对不起,刚才写错了,改正后还是老样子!以下是我的sql语句,为了排除中文影响,我把表名和字段改为拼音:
     sqlStr = "update xxb set xh='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text + "' and xm='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
      

  17.   

    我用label显示了解析后的sql语句,是正确的,而且执行过程中也没有报错,可就是得不到预期结果
      

  18.   

    Snowdust(雪尘) ,非常感谢您,我在试一下,待会儿结帐!
      

  19.   

    to everyone : 问题已解决
    sql语句写错了,应该是
    ------------
    string sqlStr = "update xxb set xh='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text + "' , xm='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
    ------------
    不知道为始末没报错!感谢Snowdust(雪尘) 、感谢wengnet(西门吹雪),感谢所有参与的人!真希望有一天,我也能有一颗红星星!
    ------------
    结帐!