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

求关于(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()+ ") ";