我在窗体的load事件里面帮定的数据,每次加载的时候正常,但是我在单击某一按钮执行更新数据库的操作后,调用load事件重新绑定数据,显示的是更新的数据。
但是我新建了一个窗体,代码是一样的东西,但是这次调用load事件却不显示更新的数据,显示仍然是旧数据,如果关闭窗体,重新打开显示的又是新数据,非常的奇怪,同样的两个窗体为什么那个就可以,到了一个新窗体里面就不行了,请大家帮忙!
代码:
        //窗体加载时绑定数据
        private void FrmUserManager_Load ( object sender , EventArgs e )
        {
            string SqlStr = "";            TV_Shopping_DataBaseConnection MyShopping = new TV_Shopping_DataBaseConnection ( );
            SqlConnection MyDataBaseConnection = MyShopping.DataBaseConnectOjbect ( );
            MyDataBaseConnection.Open ( );            SqlStr = "select userid as 'ID',userName as '姓名',userpurview as '权限',userTrue as '有效',userRemind as '备注'from      TV_UserInfo ";
            SqlDataAdapter SelectDataAdapter = new SqlDataAdapter ( SqlStr , MyDataBaseConnection );
            DataSet SelectDataSet = new DataSet ( );
            SelectDataAdapter.Fill ( SelectDataSet , "UserInfo" );
            dataGridView1.DataSource = SelectDataSet.Tables [ "UserInfo" ];
            MyDataBaseConnection.Close ( );
        }
            //更新数据库操作
            TV_Shopping_DataBaseConnection MyShopping = new TV_Shopping_DataBaseConnection ( );
            SqlConnection MyDataBaseConnection = MyShopping.DataBaseConnectOjbect ( );
            MyDataBaseConnection.Open ( );            SqlStr = "update TV_UserInfo set UserId='" + txtUserId.Text + "',UserName='" + txtUserName.Text + "',UserPurview='"
                   + UserPurview.Text + "',UserTrue='" + UserTrue.Text + "',UserRemind='" + UserRemind.Text + "'where Userid='"
                                 + txtUserId.Text + "'";
                        SqlDataAdapter UpdateDataAdapter = new SqlDataAdapter ( SqlStr , MyDataBaseConnection );
                        DataSet UpdateDataSet = new DataSet ( );
                        UpdateDataAdapter.Fill ( UpdateDataSet , "UserInfo" );
                        dataGridView1.DataSource = UpdateDataSet.Tables [ "UserInfo" ];
                        MyDataBaseConnection.Close ( );
                        this.FrmUserManager_Load ( this , e );//调用load事件重新绑定
以上是可以正常使用窗体中的代码
           //新窗体的load事件
            TV_Shopping_DataBaseConnection MyDataBaseConnection = new TV_Shopping_DataBaseConnection ( );
            SqlConnection MyProductConnection = MyDataBaseConnection.DataBaseConnectOjbect ( );
            MyProductConnection.Open ( );
            SqlStr = "select ProNumber as '编号',ProName as '名称',ProColor as '颜色',ProSpecs as '规格',ProPrice as '价格',ProHelpNum as '助记码',"+ "ProRemind as '备注' from TV_Product";
            SqlDataAdapter MyProductAdapter = new SqlDataAdapter ( SqlStr , MyProductConnection );
            DataSet MyDataSet = new DataSet ( );
            MyProductAdapter.Fill ( MyDataSet , "Product" );
            dataGridView1.DataSource = MyDataSet.Tables [ "Product" ] ;
            MyProductConnection.Close ( );
             //更新数据库代码
                    TV_Shopping_DataBaseConnection MyDataBaseConnection = new TV_Shopping_DataBaseConnection ( );
                    SqlConnection MyProductConnection = MyDataBaseConnection.DataBaseConnectOjbect ( );
                    MyProductConnection.Open ( );                    SqlStr = "update TV_Product set ProName='" + ProName.Text + "',ProPrice=" + ProPrice.Text + ",ProHelpNum='"
                           + ProHelpNum.Text + "',ProColor='" + ProColor.Text + "',ProSpecs='" + ProSpecs.Text + "',ProRemind='"
                           + ProRemind.Text + "' where ProNumber='" + ProNumber.Text  + "'";
                    SqlDataAdapter UpdateProductAdapter = new SqlDataAdapter ( SqlStr , MyProductConnection );
                    DataSet UpdateDataSet = new DataSet ( );
                    UpdateProductAdapter.Fill ( UpdateDataSet , "Product" );
                    MyFrmProduct.FrmProduct_Load ( this , e );//调用窗体load事件重新绑定数据
以上是不好用窗体代码更奇怪的是我把            SqlStr = "select ProNumber as '编号',ProName as '名称',ProColor as '颜色',ProSpecs as '规格',ProPrice as '价格',ProHelpNum as '助记码',"+ "ProRemind as '备注' from TV_Product";这句代码改成其他的查询语句,但是绑定的数据仍然是这个语句的数据,真是奇怪了。

解决方案 »

  1.   

    UpdateProductAdapter.Fill ( UpdateDataSet , "Product" ); 
    dataGridView1.DataSource = UpdateDataSet.Tables [ "Product" ];//少了一句
    MyFrmProduct.FrmProduct_Load ( this , e );//调用窗体load事件重新绑定数据
      

  2.   

    代码太乱了,加载数据和更新数据,使用一个SqlDataAdapter就好了,为什么要用两个?
      

  3.   

    UpdateProductAdapter.updata(UpdateDataSet , "Product");
    多么简单的方法。。
    UpdateCommand 更新完数据后刷新下试试。。
      

  4.   

    下面的那段代碼的連綫要関掉
     MyDataBaseConnection.Close ( ); 
      

  5.   

    MyProductConnection.Close();
    應該是這個
      

  6.   

      你沒有給grid賦新的數據源,同時你的連綫也應該関掉
    dataGridView1.DataSource = UpdateDataSet .Tables [ "Product" ] ; 
    MyProductConnection.Close();  你在看看
      

  7.   

    是不是“!IsPostBack”属性没有设!
    以前我遇到这样的问题就是这个原因,你仔细检查一下
      

  8.   

    写的真是有些乱,不太规范呀。
    先说说为什么您修改SQL语句后还是一样的:DataSet非常适用于分布式应用程序,只在填充DataSet对象是连接数据库,
    读取数据,拷贝到DataSet对象中,然后断开连接,支持离线操作,所以您的绑定的DataGridView控件中一直有原数据。我建议您使用try catch语句块或Using语句块,看看您的链接数据库是否成功。
    然后看看您的MyFrmProduct.FrmProduct_Load ( this , e );中的参数是否正确。再试试楼上各位高手的方法祝您成功!
      

  9.   

      lz写得有点乱.不过刚开始都有这样写过来的, 
        大家希望理解,  lz调试一下,自已摸索...
      

  10.   

    你那段更新数据的代码能够更新到数据库?不可能吧。
    SqlDataAdapter UpdateDataAdapter = new SqlDataAdapter ( SqlStr , MyDataBaseConnection ); 
    DataSet UpdateDataSet = new DataSet ( ); 
    UpdateDataAdapter.Fill ( UpdateDataSet , "UserInfo" ); 
    Fill是不能更新的。
    1.查询
    如果你要用Adapter,可以不用声明Command或Connetion,
    用:SqlDataAdapter sqlAdapter = new SqlDataAdapter(sqlString, connectionString); //传入的是两个字符串
    如果你只用到DataSet的一张表,干脆用DataTable
    DataTable dt = new DataTable();
    sqlAdapter.Fill(dt);dataGridView1.DataSource = dt;2.更新
    SqlConnection sqlCn = new SqlConnection(connectionString);
    SqlCommand sqlCmd = new SqlCommand(updateString, sqlCn);
    sqlCn.Open();
    sqlCmd.ExecuteNonQuery();
    sqlCn.Close();