日期:2014-05-18  浏览次数:20529 次

请教一个关于人工模拟DetailsView数据绑定的问题
在下想手工模拟DetailsView的显示数据库中的数据和更新数据库中数据的功能,出现了一些问题,想请教各位大牛

问题的背景是这样的:我有一个将DataTable中的各项数据显示到控件上(多数情况下是TextBox)的函数,然后我在PageLoad事件中调用了这个函数,以期在页面打开的时候就自动将数据库中的数据存入到DataTable中,并且显示在页面的控件中。当页面打开之后,用户可以通过修改TextBox里面的值,达到更新数据库中数据的目的。

下面问题就出现了,每次修改了一部分值后,点击确认修改按钮,页面刷新,然后控件中显示的值都是未修改之前的值,数据库也未得到修改(估计是在修改数据库之前执行了数据绑定函数,致使数据库中的旧数据覆盖了用户所做的修改,这样,就相当于没有更新数据库)。

之后,我使用的if (!IsPostBack)方法来屏蔽掉点击按钮刷新页面的情况下执行我的数据绑定函数,倒是可以完成修改功能了,但是我知道,刷新之后控件中的值不是来自数据库,而是asp.net维护的视图状态。

我想要达到的就是,在点击按钮的时候,执行我的数据绑定函数,并且能正确的更新数据库中的数据,不知有没有什么方法可以实现?

------解决方案--------------------
if(!IsPostBack)BindData();
sqldataaaater更新数据
SqlConnection cn = new SqlConnection("...");
SqlDataAdapter da = new SqlDataAdapter("", cn);
SqlCommandBuilder cmd = new SqlCommandBuilder(da);
cn.Open();
...
da.Update(yourDataSet);
cn.Close();

------解决方案--------------------
更新后重新从数据库中读取数据,
------解决方案--------------------
string connectionstring ="server = localhost;database = test;uid=sa;pwd=123"
sqlconnection con = new sqlconnection(connectionstring)
con.open();
sqldataAdapter Adapter = new sqldataAdapter();
sqlcommand cmd = new sqlcommand("select * from tableName",con);
Adapter.selectCommand = cmd;
Adapter.Update(ds,tableName);
con.Close();