我在窗体的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";这句代码改成其他的查询语句,但是绑定的数据仍然是这个语句的数据,真是奇怪了。
但是我新建了一个窗体,代码是一样的东西,但是这次调用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";这句代码改成其他的查询语句,但是绑定的数据仍然是这个语句的数据,真是奇怪了。
解决方案 »
- c#键盘事件,为什么我的程序没反应
- 文本框的关键字搜索功能...在线等
- 有关web页面创建控件ID问题
- 怎么实现点击按钮弹出一个新窗口,然后在新窗口选定数据后点“确定”将新窗口的参数到父窗口页面?
- 怎样用获得系统安装的软件列表
- 一个小小小的C#问题
- C#开发远程控制软件
- 怎么样使DataGrid列的宽度随着列显示的内容自动变化呢?急。。。
- 请大家帮忙看看这个程序弹出的错误
- webclient 405 boss一样的存在,实在无语了,求助
- 填充水晶报表的时候 为什么我查询的dataset 不起作用?急
- 用combobox确定行号,如何将datagridview中对应的行号的数据同步显示在对应的textbox里?
dataGridView1.DataSource = UpdateDataSet.Tables [ "Product" ];//少了一句
MyFrmProduct.FrmProduct_Load ( this , e );//调用窗体load事件重新绑定数据
多么简单的方法。。
UpdateCommand 更新完数据后刷新下试试。。
MyDataBaseConnection.Close ( );
應該是這個
dataGridView1.DataSource = UpdateDataSet .Tables [ "Product" ] ;
MyProductConnection.Close(); 你在看看
以前我遇到这样的问题就是这个原因,你仔细检查一下
先说说为什么您修改SQL语句后还是一样的:DataSet非常适用于分布式应用程序,只在填充DataSet对象是连接数据库,
读取数据,拷贝到DataSet对象中,然后断开连接,支持离线操作,所以您的绑定的DataGridView控件中一直有原数据。我建议您使用try catch语句块或Using语句块,看看您的链接数据库是否成功。
然后看看您的MyFrmProduct.FrmProduct_Load ( this , e );中的参数是否正确。再试试楼上各位高手的方法祝您成功!
大家希望理解, lz调试一下,自已摸索...
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();