求关于(DataTable)GridView.DataSource的问题

love_AC 2007-08-01 01:34:52
我现在想删除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不好,请问还有什么更好的方法吗?
...全文
1903 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
knifesky 2007-08-01
  • 打赏
  • 举报
回复
还有,点BUTTON时候为什么为null的问题。
因为你点的时候,页面提交到后台了,这个时候你的dataset还没有数据,他得先执行你button的操作再执行pageload,所以dataset什么也没有。
knifesky 2007-08-01
  • 打赏
  • 举报
回复
这样行不?:
Session["hID"]存放要隐藏行的ID号,或其他一个什么标识的东西,格式是a,b,c
绑定GridView的时候做下筛选,如:
DataView dv = dataset1.Tables[0].DefaultView;
dv.RowFilter = "id not in ("+Session["hID"].toString()+")";
绑定

当然也可以把这个字符传放在一个<input type=hidden>里,这样似乎能省点服务器资源。?
  • 打赏
  • 举报
回复
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技术的必备的知识吧,应该在实际产品软件中使用。
MicroSoftor 2007-08-01
  • 打赏
  • 举报
回复
ViewState 缺点比较多,而且生成的页面非常大
- -~
非常不推荐
Jinglecat 2007-08-01
  • 打赏
  • 举报
回复
用了 ViewState 之后,看看加载下面的页面有多大呢?

初学者,就用 Session 吧,假如你不知道 Session ViewState Cache Appliction 各个特点以及适用场合,就用 Session 吧,先让你的系统跑起来,再来想办法,花精力提供性能
Jinglecat 2007-08-01
  • 打赏
  • 举报
回复
用 ViewState 还不如再次从 db 加载
BearRui 2007-08-01
  • 打赏
  • 举报
回复
可以实现我要的效果,但感觉用Session不好,请问还有什么更好的方法吗?
------------------------
yong viewstate,保存到当前页面

if (!IsPostBack)
{
GridView1.DataSource = 数据库中得倒的数据;
GridView1.DataBind();
ViewState["ds"] = GridView1.DataSource;
}

DataTable dtTmp = ViewState["ds"];
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
include_me 2007-08-01
  • 打赏
  • 举报
回复
DataTable dtTmp = (DataTable)Session["ds"];
删除dtTmp中的数据后,再重新绑定
GridView1.DataSource = dtTmp;
GridView1.DataBind();
Session["ds"] = dtTmp;
BearRui 2007-08-01
  • 打赏
  • 举报
回复
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();
MicroSoftor 2007-08-01
  • 打赏
  • 举报
回复
为什么在有数据的情况下,点此Button时得倒的dtTmp为null呢?
=========================================================
要知道WEB是无连接的,在用完就没了,所以(DataTable)this.GridView1.DataSource这个DataSource一定是空,这就是你捕获不到的原因


Session不好?好像也没有什么比Session还要方便的了
-过客- 2007-08-01
  • 打赏
  • 举报
回复
用ViewState吧
include_me 2007-08-01
  • 打赏
  • 举报
回复
ViewState
amandag 2007-08-01
  • 打赏
  • 举报
回复
问:为什么在有数据的情况下,点此Button时得倒的dtTmp为null呢?
===============
看看代码
amandag 2007-08-01
  • 打赏
  • 举报
回复
可以实现我要的效果,但感觉用Session不好,请问还有什么更好的方法吗?
==========================
使用Cache

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧