ListView+DropdownList修改selectCommand实现条件筛选


 之前我以为实现这个功能很容易,之后才发现有很多问题要解决啊,花了一个晚上终于实现了,但是不知道是不是最好的办法。

查了网上很多资料,就做一个总结。

问题一:

DropdownList动态绑定select提交表单之后任然是第一项。

原因:因为提交表单之后页面会postback,就相当于页面再次实例化一样,所有控件重新生成,所以DropdownList又重新绑定数据,导致无论怎么提交,永远都是第一项~

解决办法:绑定函数放在PAGE_LOAD()里,加上if(!isPostBack)。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!isPostBack)
            {
                DataBind();
            }
        }


问题二:

如何实现DropdownList改变selectItem之后就postBack。而不用再放置一个确定按钮。

解决办法:将DropdownList属性里的autoPostBack设置为true。

 

问题三:

DropdownList选择条件之后,ListView里面点击编辑,删除操作的都是最初selectcommand所返回的数据,导致条件选择后的编辑删除数据与选择的不一致。

原因:和第一个问题相似,这是由于SQLDataSource中的SelectCommand是不被保留的。所以当您修改了SelectCommand后,点击了编辑后,ASP.net会自动再重新生成一次SqlDataSource,而他的SelectCommand依旧使用的还是原先默认设置中的select * from Table。所以他会从去数据库中,将所有的数据都都回来。

解决办法:将SelectCommand加入到Session或是ViewState或是Cookie中,然后再每次DataSource_Load的时候,将内容付给SqlDataSource
tips:默认的情况下ViewState 是可以被解密篡改,所以asp.net就没有把一些敏感东西放在ViewState里建议你加密ViewState
你可以参考http://www.microsoft.com/china/MSDN/library/archives/library/DNAspnet/html/asp11222001.asp

看代码吧~

 protected void DptDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (DptDropDownList.SelectedIndex == 0)
            {
                ApplySqlDataSource.SelectCommand = "SELECT * FROM [Apply] ORDER BY [ID] DESC";
                ViewState["SelectStr"] = "SELECT * FROM [Apply] ORDER BY [ID] DESC";

            }
}

 

protected void ApplySqlDataSource_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                ApplySqlDataSource.SelectCommand = ViewState["SelectStr"].ToString();
            }
        }


 

转载于:https://www.cnblogs.com/leestar54/archive/2011/08/31/3013221.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值