zoukankan      html  css  js  c++  java
  • 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();
                }
            }


     

  • 相关阅读:
    Vue学录 (第三章)
    Vue学录 (第二章)
    Vue 学录 (第一章)
    SpringBoot 学集 (第七章) 数据访问
    Leetcode789 阻碍逃脱者 曼哈顿距离
    Leetcode707 设计链表 双向链表实现
    leetcode 743 网络延迟时间 Dijkstra算法
    Leetcode676 实现魔法字典
    Leetcode443 压缩字符串 双指针原地压缩算法
    Leetcode23 合并K个升序链表
  • 原文地址:https://www.cnblogs.com/leestar54/p/3013221.html
Copyright © 2011-2022 走看看