FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 13499|回复: 13
打印 上一主题 下一主题

要分組和鎖定列很簡單,主要是ExtJS是支持的。只要糾正/...

[复制链接]
跳转到指定楼层
楼主
发表于 2014-4-25 15:34:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要分組和鎖定列很簡單,主要是ExtJS是支持的。只要糾正/替換一下產生的JS就可以了。
1.不修改FineUI空間本身,方便日後升級;
2.只找下JS做修正,簡單容易。

先增加幾個函數:
  1. public static class GridHelp
  2.     {
  3. /// <summary>
  4.         /// Grid功能重置
  5.         /// </summary>
  6.         public static Dictionary<string, string> GridReset = new Dictionary<string, string>();

  7.         /// <summary>
  8.         /// Grid欄位鎖定(類似Excel列凍結)
  9.         /// </summary>
  10.         /// <param name="g">表格</param>
  11.         /// <param name="ColumnID">唯一標識</param>
  12.         public static void GridFieldLock(FineUI.Grid g, String[] ColumnIDs)
  13.         {
  14.             String GridFieldLockMark = "{1C1A60AC-9E4B-4688-991F-BE95290BD1E9}";
  15.             String GridFieldUnLockMark = "{1D1CE2BE-C0E1-4DFB-A3AA-FF30A8DE73A5}";
  16.             foreach (GridColumn gc in g.Columns)
  17.             {
  18.                 g.FindColumn(gc.ColumnID).HeaderText += GridFieldUnLockMark;
  19.             }
  20.             foreach (String gid in ColumnIDs)
  21.             {
  22.                 g.FindColumn(gid).HeaderText = g.FindColumn(gid).HeaderText.Replace(GridFieldUnLockMark, "");
  23.                 g.FindColumn(gid).HeaderText += GridFieldLockMark;
  24.             }

  25.             GridReset.Add(GridFieldLockMark + """, "",locked:true,lockable:false");
  26.             GridReset.Add(GridFieldUnLockMark + """, "",lockable:false");
  27.         }

  28.         /// <summary>
  29.         /// Grid設置分組
  30.         /// </summary>
  31.         /// <param name="g">表格</param>
  32.         /// <param name="FirstColumnID">第一列ColumnI</param>
  33.         /// <param name="GroupColumnID">需要分組列的ColumnI</param>
  34.         /// <param name="Collapsed">是否不展開</param>
  35.         public static void GridFieldGroup(FineUI.Grid g, String FirstColumnID, String GroupColumnID, Boolean Collapsed)
  36.         {
  37.             string GridMark = "features:[{ftype:'grouping',groupHeaderTpl:'X1',hideGroupedHeader:true,enableGroupingMenu:false,startCollapsed:X2}],";
  38.             GridMark = GridMark.Replace("X1", "{name}").Replace("X2", Collapsed ? "true" : "false");
  39.             GridReset.Add("id:"" + g.ClientID + "",", "id:"" + g.ClientID + ""," + GridMark);

  40.             GridMark = ("Ext.create('Ext.data.ArrayStore',{fields:[{name:"X"}").Replace("X", FirstColumnID);
  41.             GridReset.Add(GridMark, GridMark.Replace("fields:", ("groupField:'X',fields:").Replace("X", GroupColumnID)));
  42.         }
  43.     }
复制代码
然後重寫WebFrom頁面事件:
  1. protected override void Render(System.Web.UI.HtmlTextWriter writer)
  2. {
  3.             StringWriter sw = new StringWriter();
  4.             base.Render(new System.Web.UI.HtmlTextWriter(sw));
  5.             String html = sw.ToString();

  6.             if (GridHelp.GridReset.Count > 0)
  7.             {
  8.                 foreach (KeyValuePair<string, string> dict in GridHelp.GridReset)
  9.                 {
  10.                     html = html.Replace(dict.Key, dict.Value);
  11.                 }
  12.             }

  13.             writer.Write(html);
  14.         }
复制代码
OK,接下來直接使用:
            if (!IsPostBack)
            {

                GridHelp.GridFieldLock(Grid1, new string[] { "f1", "f2", "f3", "f4" });
                GridHelp.GridFieldGroup(Grid1, "f1", "fx", true);

            }
板凳
发表于 2014-4-26 16:51:00 | 只看该作者
改哪个js,请您说详细下好吗
地板
发表于 2014-5-5 11:27:48 | 只看该作者
您好!我用您的代码测试了一下,没有效果,请问能否给一个示例。非常感谢!
5#
发表于 2014-5-5 15:06:39 | 只看该作者
使用官网示例:FineUI.Examples/grid/grid.aspx 结合您的代码修改如下,运行无效。


aspx代码:
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="grid.aspx.cs" Inherits="FineUI.Examples.grid.grid" %>

  2. <!DOCTYPE html>
  3. <html>
  4. <head runat="server">
  5.     <title></title>
  6.     <link href="../css/main.css" rel="stylesheet" type="text/css" />
  7. </head>
  8. <body>
  9.     <form id="form1" runat="server">
  10.     <x:PageManager ID="PageManager1" runat="server" />
  11.     <x:Grid ID="Grid1" ShowBorder="true" ShowHeader="true" Title="表格" Width="400px" runat="server"
  12.         DataKeyNames="Guid">
  13.         <Columns>
  14.             <x:TemplateField  ColumnID="f1" Width="60px">
  15.                 <ItemTemplate>
  16.                     <asp:Label ID="Label1" runat="server" Text='<%# Container.DataItemIndex + 1 %>'></asp:Label>
  17.                 </ItemTemplate>
  18.             </x:TemplateField>
  19.             <x:BoundField ColumnID="f2" Width="100px" DataField="Name" DataFormatString="{0}" HeaderText="姓名" />
  20.             <x:TemplateField Width="60px" HeaderText="性别">
  21.                 <ItemTemplate>
  22.                     <asp:Label ID="Label3" runat="server" Text='<%# GetGender(Eval("Gender")) %>'></asp:Label>
  23.                 </ItemTemplate>
  24.             </x:TemplateField>
  25.             <x:BoundField Width="60px" DataField="EntranceYear" HeaderText="入学年份" />
  26.             <x:CheckBoxField Width="60px" RenderAsStaticField="true" DataField="AtSchool" HeaderText="是否在校" />
  27.             <x:HyperLinkField HeaderText="所学专业" DataToolTipField="Major" DataTextField="Major"
  28.                 DataTextFormatString="{0}" DataNavigateUrlFields="Major" DataNavigateUrlFormatString="http://gsa.ustc.edu.cn/search?q={0}"
  29.                 DataNavigateUrlFieldsEncode="true" Target="_blank" ExpandUnusedSpace="True" />
  30.             <x:ImageField Width="60px" DataImageUrlField="Group" DataImageUrlFormatString="~/images/16/{0}.png"
  31.                 HeaderText="分组">
  32.             </x:ImageField>
  33.             <x:BoundField Width="100px" DataField="LogTime" DataFormatString="{0:yy-MM-dd}" HeaderText="注册日期" />
  34.         </Columns>
  35.     </x:Grid>
  36.     <br />
  37.     <br />
  38.     </form>
  39. </body>
  40. </html>
复制代码



cs代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;
  6. using System.Data;
  7. using System.Text;
  8. using System.IO;

  9. namespace FineUI.Examples.grid
  10. {
  11.     public partial class grid : PageBase
  12.     {
  13.         protected override void Render(System.Web.UI.HtmlTextWriter writer)
  14.         {
  15.             StringWriter sw = new StringWriter();
  16.             base.Render(new System.Web.UI.HtmlTextWriter(sw));
  17.             String html = sw.ToString();

  18.             if (GridHelp.GridReset.Count > 0)
  19.             {
  20.                 foreach (KeyValuePair<string, string> dict in GridHelp.GridReset)
  21.                 {
  22.                     html = html.Replace(dict.Key, dict.Value);
  23.                 }
  24.             }

  25.             writer.Write(html);
  26.         }

  27.         protected void Page_Load(object sender, EventArgs e)
  28.         {
  29.             if (!IsPostBack)
  30.             {
  31.                 GridHelp.GridFieldLock(Grid1, new string[] { "f1", "f2" });
  32.                 //GridHelp.GridFieldGroup(Grid1, "f1", "fx", true);
  33.                 BindGrid();

  34.             }
  35.         }

  36.         #region BindGrid

  37.         private void BindGrid()
  38.         {
  39.             DataTable table = GetDataTable();

  40.             Grid1.DataSource = table;
  41.             Grid1.DataBind();

  42.         }

  43.         

  44.         #endregion



  45.     }



  46.     public static class GridHelp
  47.     {
  48.         /// <summary>
  49.         /// Grid功能重置
  50.         /// </summary>
  51.         public static Dictionary<string, string> GridReset = new Dictionary<string, string>();

  52.         /// <summary>
  53.         /// Grid欄位鎖定(類似Excel列凍結)
  54.         /// </summary>
  55.         /// <param name="g">表格</param>
  56.         /// <param name="ColumnID">唯一標識</param>
  57.         public static void GridFieldLock(FineUI.Grid g, String[] ColumnIDs)
  58.         {
  59.             String GridFieldLockMark = "{1C1A60AC-9E4B-4688-991F-BE95290BD1E9}";
  60.             String GridFieldUnLockMark = "{1D1CE2BE-C0E1-4DFB-A3AA-FF30A8DE73A5}";
  61.             foreach (GridColumn gc in g.Columns)
  62.             {
  63.                 g.FindColumn(gc.ColumnID).HeaderText += GridFieldUnLockMark;
  64.             }
  65.             foreach (String gid in ColumnIDs)
  66.             {
  67.                 g.FindColumn(gid).HeaderText = g.FindColumn(gid).HeaderText.Replace(GridFieldUnLockMark, "");
  68.                 g.FindColumn(gid).HeaderText += GridFieldLockMark;
  69.             }

  70.             GridReset.Add(GridFieldLockMark + """, "",locked:true,lockable:false");
  71.             GridReset.Add(GridFieldUnLockMark + """, "",lockable:false");
  72.         }

  73.         /// <summary>
  74.         /// Grid設置分組
  75.         /// </summary>
  76.         /// <param name="g">表格</param>
  77.         /// <param name="FirstColumnID">第一列ColumnI</param>
  78.         /// <param name="GroupColumnID">需要分組列的ColumnI</param>
  79.         /// <param name="Collapsed">是否不展開</param>
  80.         public static void GridFieldGroup(FineUI.Grid g, String FirstColumnID, String GroupColumnID, Boolean Collapsed)
  81.         {
  82.             string GridMark = "features:[{ftype:'grouping',groupHeaderTpl:'X1',hideGroupedHeader:true,enableGroupingMenu:false,startCollapsed:X2}],";
  83.             GridMark = GridMark.Replace("X1", "{name}").Replace("X2", Collapsed ? "true" : "false");
  84.             GridReset.Add("id:"" + g.ClientID + "",", "id:"" + g.ClientID + ""," + GridMark);

  85.             GridMark = ("Ext.create('Ext.data.ArrayStore',{fields:[{name:"X"}").Replace("X", FirstColumnID);
  86.             GridReset.Add(GridMark, GridMark.Replace("fields:", ("groupField:'X',fields:").Replace("X", GroupColumnID)));
  87.         }
  88.     }
  89. }
复制代码
6#
发表于 2014-5-5 15:07:38 | 只看该作者
~~疯狂~~ 发表于 2014-5-5 15:06
使用官网示例:FineUI.Examples/grid/grid.aspx 结合您的代码修改如下,运行无效。

运行没有报错,但是不会锁定列。
7#
发表于 2014-5-6 09:06:07 | 只看该作者
请问您使用的是4的版本还是3的版本?
8#
 楼主| 发表于 2014-5-7 22:32:08 | 只看该作者
本帖最后由 Herry 于 2014-5-7 22:36 编辑

4版,不修改FineUI本身,要用protected override void Render(System.Web.UI.HtmlTextWriter writer)调整,protected override void Render(System.Web.UI.HtmlTextWriter writer) 可以放在BasePage里面。web.config中FineUI的Debug设置为false.
9#
发表于 2014-5-9 19:06:06 | 只看该作者
严重关注,有人试验成功没?分享下经验,楼主说的没太看明白
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-4-28 06:42 , Processed in 0.052027 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表