如何在gridview中实现多选

author author     2023-04-18     163

关键词:

GridView实现跨页多选,参考如下:

JS 前台:

//GridView中实现多选效果
function CheckAllC(oCheckbox) 
    var GridView1 = document.getElementById(\'gvDataList\');
    for (i = 1; i < gvDataList.rows.length; i++) 
        GridView1.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = oCheckbox.checked;
    

 

后台:

1:GridView翻页PageIndexChanging事件中调用获取多选主键信息,还需要判断一下,翻页之前是否已经有数据选中。具体方法如下:

方法如下:

#region 存储GridView翻页数据主键
        /// <summary>
        /// 存储GridView翻页数据主键
        /// </summary>
        private void RememberOldValues()
       
            Dictionary<string, string> list = Session["SelectedObject"] as Dictionary<string, string>;
            if (list == null)
           
                list = new Dictionary<string, string>();
           
            foreach (GridViewRow row in gvDataList.Rows)
           
                CheckBox cb = (CheckBox)row.FindControl("chkSelect");
                string user = gvDataList.DataKeys[row.RowIndex].Value.ToString();
                if (Session["SelectedObject"] != null)
                    list = (Dictionary<string, string>)Session["SelectedObject"]; //很重要
                if (cb.Checked)
               
                    if (!list.ContainsKey(user))
                   
                        list.Add(user, "null");
                   
               
                else
               
                    if (list.ContainsKey(user))
                   
                        list.Remove(user);
                   
               
                if (list != null && list.Count > 0)
                    Session["SelectedObject"] = list;
           


       
        #endregion

 

附带GridView自带分页:

#region  分页
        protected void gvDataList_PageIndexChanging(object sender, GridViewPageEventArgs e)
       
            RememberOldValues();
            // 得到该控件
            GridView theGrid = sender as GridView;
            int newPageIndex = 0;
            if (e.NewPageIndex == -3)
           
                //点击了Go按钮
                TextBox txtNewPageIndex = null;

                //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow
                GridViewRow pagerRow = theGrid.BottomPagerRow;

                if (pagerRow != null)
               
                    //得到text控件
                    txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox;
               
                if (txtNewPageIndex != null)
               
                    //得到索引
                    newPageIndex = int.Parse(txtNewPageIndex.Text) - 1;
               
           
            else
           
                //点击了其他的按钮
                newPageIndex = e.NewPageIndex;
           
            //防止新索引溢出
            newPageIndex = newPageIndex < 0 ? 0 : newPageIndex;
            newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex;

            //得到新的值
            theGrid.PageIndex = newPageIndex;

            //重新绑定
            BindItems(0, NodeID, strSearch);
       
        #endregion

 

2:点击提交按钮时,需要获取下GridView中的多选主键ID

#region 获取单选按钮选中的主键ID
        /// <summary>
        /// 获取单选按钮选中的主键ID
        /// </summary>
        /// <returns></returns>
        private void GetPkID()
       
            Dictionary<string, string> list = Session["SelectedObject"] as Dictionary<string, string>;
            if (list == null)
           
                list = new Dictionary<string, string>();
           
            foreach (GridViewRow row in gvDataList.Rows)
           
                CheckBox cb = (CheckBox)row.FindControl("chkSelect");
                string user = gvDataList.DataKeys[row.RowIndex].Value.ToString();
                if (cb.Checked)
               
                    if (!list.ContainsKey(user))
                   
                        list.Add(user, "null");
                   
               
                else
               
                    if (list.ContainsKey(user))
                   
                        list.Remove(user);
                   
               
           
            ViewState["SelectedObject"] = list;    
       
        #endregion

参考技术A 1 问题:
GridView中图片的展示是没有问题的,但是 当选中了一张or几张图片后,(当展示的图片比较多得情况下,就得滑动gridview已浏览其他的图片),一旦滑动gridview,之前选择的照片就会出现混乱(照片的展示顺序是对的,但是改变的背景会出现在某个没有被选定的照片上面)。
2 我选择照片的方式是:
当用户点击某个照片时,在setOnItemClickListener或者自定适配器的getView中将视图的背景换掉,或者将一个gridview上得cell视图中某个一开始被隐藏的图片设为visible。
但是上面的两种方式会出现“问题”中出现的那种问题。
查了很多材料,一开始是以为使用了ViewHolder的原因,于是每次都去
convertView = inflater.inflate(resource, null); // 生成条目界面对象
cellImageView = (ImageView) convertView.findViewById(R.id.camera_gridview_cell);
结果出了内存溢出的情况。
后来直接将动态去生成一个imageview作为grid view的cell,结果问题依旧,活动后选定的照片会出现混乱。
3 问题的由来:
因为listview和gridview都是使用adapter以MVC的形式来加载数据到视图,而处于某种原因,listview和gridview中第一次展示在屏幕上得cells是新建的,当加载的cells过多时,出现多屏幕时,从第二屏开始复用第一屏中的cells视图,而且貌似复用的顺序也是不确定的,于是就出现了不滑动gridview效果正常,一旦滑动了,效果就会混乱。
4 可能的解决方案:
1 http://www.coderzheaven.com/2013/04/26/multiple-selection-listview-android/ 但是链接中的代码没有工作。
2 http://blog.csdn.net/creativemobile/article/details/9007555 这个可以正常工作
其实每次滑动,活动所有展示在屏幕上得cells都会执行是配置器中的getView方法,在结合“3 问题的由来”的解释,发现,何不将只有在setOnItemClickListener中改变背景的操作,放在getView中,而且不加点击监听器,让他只要执行到getView就去改变背景,只是,只有那些isChecked设为TRUE的才变为我们想要的背景,而其他的改为另一个背景,(注意不能为空,即使isChecked为false)
OK 问题解决了
5 未验证的解决方案:
监听gridview滑动,在onScrollStateChanged方法中获得所有展示在屏幕的cells,将其背景全部更新,发现与上面的解决方案本质上同出一辙。

fileupload1在部分浏览器中实现多选

 <asp:FileUploadID="FileUpload1"multiplerunat="server"/> 添加   multiple 这个就可以  ie不行  有些浏览器是可以支持的       HttpFileCollectio 查看详情

我应该如何在角度材料中实现多项选择选项?

】我应该如何在角度材料中实现多项选择选项?【英文标题】:HowamIsupposedtoimplementmultipleselectoptioninangular-material?【发布时间】:2015-04-2317:22:12【问题描述】:我已经检查了文档和演示,但是唉!!我还没有找到任何关于使用angul... 查看详情

如何在angular js中实现多路由

】如何在angularjs中实现多路由【英文标题】:Howtoachievemultipleroutinginangularjs【发布时间】:2018-11-2223:10:07【问题描述】:我在AngularJS中练习routing。到目前为止,我已经研究了2页路由,但现在我想实现3页路由。(function()\'usestrict\';... 查看详情

如何在 PostgreSQL 中实现多对多关系?

】如何在PostgreSQL中实现多对多关系?【英文标题】:Howtoimplementamany-to-manyrelationshipinPostgreSQL?【发布时间】:2012-04-0502:14:21【问题描述】:我相信标题是不言自明的。如何在PostgreSQL中创建表结构以建立多对多关系。我的例子:Pro... 查看详情

如何在 laravel 护照中实现多身份验证

】如何在laravel护照中实现多身份验证【英文标题】:howtoimplementmultiauthinlaravelpassport【发布时间】:2018-09-0120:51:57【问题描述】:我有两个用户admin/user我想验证这两个用户的api,它适用于一个用户,但不适用于管理员看看我尝试... 查看详情

extjs中grid中实现多选,相当于按着ctrl键实现多选

extjs中Grid的CheckboxSelectionModel中,实现点击每条记录相当于按着Ctrl键点击一样的效果参考技术A好像没有这样的属性设置...你的自己写段代码来控制了...具体思路:当你点击CheckboxSelectionModel中的项的时候将原来选择的项继续设置为... 查看详情

如何在 C 中实现多分支树结构

】如何在C中实现多分支树结构【英文标题】:HowtoimplementamultibranchtreestructureinC【发布时间】:2011-08-2713:14:14【问题描述】:我很久没有用C写代码了。我正在尝试做一棵多叶树。我正在尝试将C#trie实现转换为C,以便使用CUDA在GPU... 查看详情

如何在 Firebase 身份验证中实现多用户帐户登录和切换?

】如何在Firebase身份验证中实现多用户帐户登录和切换?【英文标题】:HowdoIwantimplementmultipleuseraccountloginandswitchinginFirebaseAuthentication?【发布时间】:2018-05-0713:08:55【问题描述】:在GmailAndroid应用中,您可以在用户帐户视图上滑... 查看详情

如何使用 Java Spring 在 MySql 中实现多租户 [关闭]

】如何使用JavaSpring在MySql中实现多租户[关闭]【英文标题】:HowcanIachievemultitenancyinMySqlbyusingJavaSpring[closed]【发布时间】:2018-02-2605:13:48【问题描述】:如何使用MySqlJavaSpring最佳实践实现多租户,并建议使用任何其他数据库代替MyS... 查看详情

如何在 Sonata Media Bundle 中实现多对多关系

】如何在SonataMediaBundle中实现多对多关系【英文标题】:Howtoimplementmany-to-manyrelationshipsinSonataMediaBundle【发布时间】:2012-07-2117:08:54【问题描述】:我正在尝试将SonataMediaBundle与另一个实体相关联:Products与ManyToMany关系。架构和关... 查看详情

如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?

】如何使用VisualStudioforMac在Xamarin.Forms中实现多目标?【英文标题】:HowtomultitargetinXamarin.FormswithVisualStudioforMac?【发布时间】:2019-07-2323:37:14【问题描述】:我开始创建一个.NETStandardLibrary并打算创建一个NuGet-但后来发现我还需要... 查看详情

在 iPad App 中实现多用户聊天

...登录该应用的用户发送文本或音频片段。我正在寻找有关如何实现这一点的指针。我阅读了许多文章。我已经缩小到1)XMPP(Jabber)和2)网络套接字基于解决方案 查看详情

如何在solr中实现多core查询

参考技术A  /****多核查询测试*@throwsException*/publicstaticvoidqueryMultiCore()throwsException//查询a和b下面的数据,HttpSolrClientsc=newHttpSolrClient("http://192.168.1.215:8983/solr/a");Stringshards="192.168.1.215:8983/solr/a,192.168.1.214:8983/solr/b";Mod... 查看详情

java示例代码_在Java中实现多线程池

java示例代码_在Java中实现多线程池 查看详情

如何在android的Gridview中实现Image Gallery?

】如何在android的Gridview中实现ImageGallery?【英文标题】:HowtoimplementImageGalleryinGridviewinandroid?【发布时间】:2011-10-1421:15:43【问题描述】:我有一个要求,我想用GridView实现一个图片库。我尝试在Android开发者网站上使用Hellogallery... 查看详情

使用消息传递接口在 Python 中实现多处理 [关闭]

】使用消息传递接口在Python中实现多处理[关闭]【英文标题】:ImplementmultiprocessinginPythonwithamessagepassinginterface[closed]【发布时间】:2021-03-1204:49:55【问题描述】:我正在尝试将一些JavaScript代码转换为Python,但是JavaScript以异步方式... 查看详情

我可以使用优化实验在 Anylogic 中实现多目标优化问题吗?

】我可以使用优化实验在Anylogic中实现多目标优化问题吗?【英文标题】:CanIimplementamultiobjectiveoptimizationprobleminAnylogicusingoptimizationexperiment?【发布时间】:2021-02-1517:06:14【问题描述】:我正在尝试在Anylogic中使用基于Anylogic代理... 查看详情

如何在没有选择按钮的情况下在 GridView 中实现全行选择?

】如何在没有选择按钮的情况下在GridView中实现全行选择?【英文标题】:HowtoimplementfullrowselectinginGridViewwithoutselectbutton?【发布时间】:2011-09-0904:23:07【问题描述】:我正在实现一项功能,当用户按下GridView中行中的任何点时,... 查看详情