对于GridPanel中拖动选中行排序的实现,网上有不少ExtJs实现的例子,但是没有找到使用Ext.net实现的,正好最近有个需求要使用,干脆来写一个。

DEMO功能说明:

  • 1、拖动GridPanel选中行到新位置排序。
  • 2、在拖动结束后,重新会选中前面拖动的行。
  • 3、拖动排序功能支持Grid单选与多选模式。
  • 4、加了【最上】【最下】【上移】【下移】四个按钮排序的功能。目前按钮排序只能在Grid的单选模式下使用。

功能演示:

    1. 1、单选

    2、多选

    按钮的排序功能,有兴趣的朋友可以自己试一下,就不截图了,在使用按钮排序时,请将SingleSelect设置为true

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridRecordOrder.aspx.cs" Inherits="ExtNetSamples.GridDragDrop.GridRecordOrder" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server"><title></title><script type="text/javascript">var notifyDrop = function (ddSource, e, data) {var grid = data.grid;var store = grid.store;var rows = grid.getSelectionModel().getSelections();var cindex = ddSource.getDragData(e).rowIndex;if (cindex == undefined || cindex < 0) {e.cancel = true;return;}//纪录拖放后被拖放纪录的新rowIndexvar dragDropedRowIndexs = new Array();var newRowIndex = cindex;var total = store.getTotalCount();//当在选中多行拖动调整时,计算新的行索引起始位置if ((cindex + rows.length) > total) {newRowIndex = total - rows.length;}for (var i = 0; i < rows.length; i++) {var rowdata = store.getById(rows[i].id);if (!this.copy) {store.remove(store.getById(rows[i].id));store.insert(cindex, rowdata);dragDropedRowIndexs[i] = newRowIndex + i;if (parseInt(cindex + 1) < parseInt(total)) {/**  通过这里取得拖动后的顺序,可处理自己的逻辑,比如存数据库*///拖动行的Order(原顺序)var hiDargId = store.getById(rows[i].id).get("Order");//拖动后的Order(新顺序)var newId = store.getAt(cindex + 1).get("Order");}}}grid.getSelectionModel().selectRows(dragDropedRowIndexs);};function showErrorMsg(msg) {Ext.Msg.show({title: '错误',msg: msg,buttons: Ext.Msg.OK,icon: Ext.MessageBox.ERROR});}var selectedRowIndex = undefined;/**  行选中事件*参数:model:selectionModel,rowIndex:选中行索引*/var rowSelect = function (model, rowIndex) {selectedRowIndex = rowIndex;}function changeOrder(grid, commandName) {if (!grid.getSelectionModel().singleSelect) {showErrorMsg("使用【最上】【上移】【下移】【最下】按钮调整顺序的方式,暂只支持单选模式,!请设置:ext:RowSelectionModel ID=\"RowSelectionModel1\" SingleSelect=\"<b>true</b>\" runat=\"server\"");return;}//获取选中行var selectedRow = grid.getSelectionModel().getSelected();//如果没有选中行,提示错误if (!selectedRow) {showErrorMsg("请选中要调整顺序的行!");return;}var cindex = undefined;var store = grid.getStore();var total = store.getTotalCount();store.remove(selectedRow);switch (commandName) {case "top":cindex = 0;store.insert(cindex, selectedRow);break;case "bottom":cindex = total -1;store.insert(cindex, selectedRow);break;case "up":if (selectedRowIndex != undefined && selectedRowIndex > 0) {cindex = selectedRowIndex - 1;store.insert(cindex, selectedRow);}else {cindex = 0;store.insert(cindex, selectedRow);}break;case "down":if (selectedRowIndex != undefined && selectedRowIndex < total -1) {cindex = selectedRowIndex + 1;store.insert(cindex, selectedRow);}else {cindex = total -1;store.insert(cindex, selectedRow);}break;default:showErrorMsg("没有找到正确的CommandName!");}//重新选中行grid.getSelectionModel().selectRow(cindex);}</script>
    </head>
    <body><form id="Form1" runat="server"><ext:ResourceManager ID="ResourceManager1" runat="server" /><div style="padding-left:20px;"><br /><h1>拖动Grid的行调整顺序</h1><p style="font-size:12px;">拖动行调整顺序,若只使用拖动来调整行顺序,可支持选中多纪录,但若需要使用【最上】、【上移】、【下移】、【最下】按钮的功能,必须设置单选行模式.</p>    <br /><ext:Store ID="Store1" runat="server"><Reader><ext:JsonReader><Fields><ext:RecordField Name="Id" /><ext:RecordField Name="Name" /><ext:RecordField Name="Sex" /><ext:RecordField Name="Address" /><ext:RecordField Name="Order" /></Fields></ext:JsonReader></Reader></ext:Store><ext:Panel ID="Panel1" runat="server" Width="650" Height="300" Layout="FitLayout" Frame="true"><Items>              <ext:GridPanel ID="GridPanel1" runat="server" DDGroup="DDGroup"Draggable="true"StoreID="Store1"EnableDragDrop="true"StripeRows="true"AutoExpandColumn="Address"Width="325"Title="Left"><ColumnModel><Columns><ext:Column ColumnID="Name" Header="姓名" Width="160" DataIndex="Name" /><ext:Column Header="性别" Width="60" DataIndex="Sex" /><ext:Column Header="地址" Width="60" DataIndex="Address" ColumnID="Address" /><ext:Column Header="顺序" Width="60" DataIndex="Order" /></Columns></ColumnModel><SelectionModel><ext:RowSelectionModel ID="RowSelectionModel1" SingleSelect="true" runat="server"><Listeners><RowSelect Fn="rowSelect" /></Listeners></ext:RowSelectionModel></SelectionModel></ext:GridPanel>                   </Items>            <BottomBar><ext:Toolbar ID="Toolbar1" runat="server"><Items><ext:Button runat="Server" ID="BtnTop" Icon="BulletArrowTop" Text="最上"><Listeners><Click Handler="changeOrder(#{GridPanel1},'top')" /></Listeners></ext:Button><ext:ToolbarSpacer /><ext:Button runat="Server" ID="BtnUp" Icon="BulletArrowUp" Text="上移"><Listeners><Click Handler="changeOrder(#{GridPanel1},'up')" /></Listeners></ext:Button>   <ext:ToolbarSpacer /><ext:Button runat="Server" ID="BtnDown" Icon="BulletArrowDown" Text="下移" ><Listeners><Click Handler="changeOrder(#{GridPanel1},'down')" /></Listeners></ext:Button>   <ext:ToolbarSpacer /><ext:Button runat="Server" ID="BtnBottom" Icon="BulletArrowBottom" Text="最下"><Listeners><Click Handler="changeOrder(#{GridPanel1},'bottom')" /></Listeners></ext:Button><ext:ToolbarFill ID="ToolbarFill1" runat="server" /><ext:Button ID="Button1" runat="server" Text="Reset"><Listeners><Click Handler="Store1.loadData(Store1.proxy.data);" /></Listeners></ext:Button></Items></ext:Toolbar></BottomBar></ext:Panel> <ext:DropTarget ID="DropTarget1" runat="server" Target="={GridPanel1.getView().mainBody}" Group="DDGroup"><NotifyDrop Fn="notifyDrop" /></ext:DropTarget> </div></form>
    </body>
    </html>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace ExtNetSamples.GridDragDrop
    {public partial class GridRecordOrder : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){List<object> data = new List<object>();for (int i = 0; i < 10; i++){data.Add(new{Id = i,Name = "Name " + i,Sex = i % 2 == 0 ? "男" : "女",Address = "四川省成都市XX区XX路XX号",Order = i});}this.Store1.DataSource = data;this.Store1.DataBind();}}
    }

    DEMO下载地址:http://download.csdn.net/download/llxchen/3687672

Ext.Net 1.x_Ext.Net.Grid拖动行排序,【最上】【最下】【上移】【下移】按钮排序相关推荐

  1. Ext.net Grid拖动行排序,【最上】【最下】【上移】【下移】按钮排序

    对于GridPanel中拖动选中行排序的实现,网上有不少ExtJs实现的例子,但是没有找到使用Ext.net实现的,正好最近有个需求要使用,干脆来写一个. DEMO功能说明: 1.拖动GridPane ...

  2. Ext grid js上移下移样例

    function moveup(){//上移     var grid = odin.ext.getCmp('gridid');     var sms = grid.getSelectionMode ...

  3. [Ext JS]5.9 嵌套Grid的实现及注意事项

    嵌套网格的效果 嵌套网格(Nest Grid) 是每个Grid的行展开后是一个子Grid, 实现的效果如下图: 嵌套网格的实现 Ext JS 直接提供了嵌套网格的实现, 即通过Grid的插件 Ext. ...

  4. [Ext JS 4] 实战之Grid, Tree Gird 动态添加列续(性能考虑)

    前言 延续: [Ext JS 4] 实战之Grid, Tree Gird 动态添加列 这一篇. 在上一篇中有提到在grid 中如何进行带隐藏栏位的动态添加方式.归纳一下思路就是: 先显示,后隐藏. 当 ...

  5. [Ext]2.0探索(七)Grid使用介绍

    [Ext]2.0探索(七)Grid使用介绍 2008年07月01日 星期二 15:25 Ext2.0框架的Grid使用介绍     最近空闲时间在学习Ext2.0框架,只有一个字的感叹"强& ...

  6. [Ext JS 4] 实战之Grid, Tree Gird 动态添加行

    前言 在 [Ext JS 4] 实战之Grid, Tree Gird 动态添加列 这一篇中,有介绍到如何动态添加一列 -- 设置新columns 后调用reconfigure 方法. 这里来承接这一篇 ...

  7. [Ext JS 4] 实战之Grid, Tree Gird 动态添加列

    前言 在Ext js 中, 定义一个Grid 很方便,主要需要的是 1. 定义columns 2. 定义一个store 3. 定义grid var store1 = Ext.create('Ext.d ...

  8. elf section类型_在 498 行极小 OS 上跑标准 ELF 程序

    本文首发于 在 498 行极小系统跑标准 ELF 程序 简介 ELF 在 Linux 系统中作为标准可执行文件格式已经存在了 ~25 年. 如果要在 Linux 下直接研究 ELF,通常很难绕过 Li ...

  9. Yii框架里用grid.CGridView调用pager扩展不显示最后一页按钮的解决

    有如下一例,调用zii.widgets.grid.CGridView显示Blog信息,代码如下: 1 $this->widget('zii.widgets.grid.CGridView', 2 ...

最新文章

  1. 第十一周总结CoreIDRAW
  2. SQL获取变量类型以及变量最大长度
  3. STM32----摸石头过河系列(六)
  4. linux线程wait和sleep,java多线程 sleep()和wait()的区别
  5. CodeForces 314C 树状数组 + dp
  6. 开发项目的简单流程(需求、数据库、编码)
  7. linux下面桌面的安装
  8. 软件测试一个月工作总结范文,2019年最新软件测试师工作总结范文
  9. 用JS屏蔽backspace(退格删除)键或某一个指定键的完美代码
  10. ZZULIOJ 1050~1059(oj入门题)
  11. mysql中update语句怎么设置变量_MySQL数据库update语句使用详解
  12. 2018年工商银行软件开发中心面试经历
  13. 杰理之ifi_camera跑sfc的启动时间【篇】
  14. 论文笔记:多标签学习——ACkEL算法
  15. Docker_notes_practice
  16. tailwindcss使用教程
  17. 二维码门禁助力于打造更智能化的出入管理-码上开门,说走就走
  18. 巧妙去掉多余的安全删除硬件图标
  19. 根据csv文件按照标签划分文件夹数据集
  20. 数据分析项目-合集-day02

热门文章

  1. 解决[FireDAC][DatS]-32. Variable length column [Name] overflow. Value length - [26], column maximum le
  2. 国家标准(简称国标)下载备忘
  3. DICOM:开源DICOM服务框架DCM4CHE 安装
  4. CocosCreator之Animation动画组件
  5. 论文写作——5 introduction与语言逻辑(以韬韬同学ASMI27版为例)
  6. Anaconda3安装教程(详细)
  7. matlab阻尼震动论文,基于MATLAB的平方阻尼振动研究
  8. 30K~65K,春节前最后一批热门技术岗位,快到碗里来
  9. [论文阅读]Auto-Encoder Guided GAN for ChineseCalligraphy Synthesis
  10. 模板四十天之一 KMP