求关于(DataTable)GridView.DataSource的问题
我现在想删除GridView中选中行的数据(注:只是删除已经绑定到GridView上的数据,并不在数据库中删除)。我添加了一个Button,并写下Click如下:
DataTable dtTmp = (DataTable)this.GridView1.DataSource;
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
问:为什么在有数据的情况下,点此Button时得倒的dtTmp为null呢?
是不是需要设置什么?
我现在在PageLoad时用
if (!IsPostBack)
{
GridView1.DataSource = 数据库中得倒的数据;
GridView1.DataBind();
Session[ "ds "] = GridView1.DataSource;
}
可以实现我要的效果,但感觉用Session不好,请问还有什么更好的方法吗?
------解决方案--------------------可以实现我要的效果,但感觉用Session不好,请问还有什么更好的方法吗?
==========================
使用Cache
------解决方案--------------------用ViewState吧
------解决方案--------------------DataTable dtTmp = (DataTable)this.GridView1.DataSource;
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
-----------------------------------
楼主以前是winform的吧,在web中是不会保存GridView1的DataSource。因为web的无状态性。
楼主这样必须自己保存GridView1.DataSource,保存到session或viewstate中,比如:
if (!IsPostBack)
{
GridView1.DataSource = 数据库中得倒的数据;
GridView1.DataBind();
Session[ "ds "] = GridView1.DataSource;
}
DataTable dtTmp = Session[ "ds "];
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
------解决方案--------------------可以实现我要的效果,但感觉用Session不好,请问还有什么更好的方法吗?
------------------------
yong viewstate,保存到当前页面
if (!IsPostBack)
{
GridView1.DataSource = 数据库中得倒的数据;
GridView1.DataBind();
ViewState[ "ds "] = GridView1.DataSource;
}
DataTable dtTmp = ViewState[ "ds "];
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
------解决方案--------------------用 ViewState 还不如再次从 db 加载
------解决方案--------------------用了 ViewState 之后,看看加载下面的页面有多大呢?
初学者,就用 Session 吧,假如你不知道 Session ViewState Cache Appliction 各个特点以及适用场合,就用 Session 吧,先让你的系统跑起来,再来想办法,花精力提供性能
------解决方案--------------------ViewState 缺点比较多,而且生成的页面非常大
- -~
非常不推荐
------解决方案--------------------asp.net2.0可以根本不把ViewState输出到页面上。可以参考:
http://www.google.cn/search?complete=1&hl=zh-CN&newwindow=1&rls=com.microsoft%3Aen-US&q=SessionPageStatePersister+&btnG=Google+%E6%90%9C%E7%B4%A2&meta=lr%3Dlang_zh-CN%7Clang_zh-TW
也可以自定义自己的PageStatePersister,例如把ViewState写入服务器端app_data下等等(这只需要写一二十行代码,它的好处是即使服务端重启也能维持状态)。这也算是一个asp.net技术的必备的知识吧,应该在实际产品软件中使用。
------解决方案--------------------这样行不?:
Session[ "hID "]存放要隐藏行的ID号,或其他一个什么标识的东西,格式是a,b,c
绑定GridView的时候做下筛选,如:
DataView dv = dataset1.Tables[0].DefaultView;
dv.RowFilter = "id not in ( "+Session[ "hID "].toString()+ ") ";