博客
关于我
FineUI开源版之TreeGrid实现
阅读量:421 次
发布时间:2019-03-06

本文共 6254 字,大约阅读时间需要 20 分钟。

FineUI开源版并未内置树表格功能,但通过扩展和修改,可以实现树表格的效果。本文将详细介绍如何实现树表格,并提供相应的代码示例。

1. 树表格的需求分析

FineUI默认不支持树表格,但在实际项目中可能需要显示层级化的数据结构。以下是常见需求:

  • 展开/收缩树节点
  • 显示层级信息
  • 支持点击事件(子节点跳转)
  • 自定义节点图标
  • 高效的数据绑定和排序

2. 实现树表格的关键点

2.1 树表格的核心逻辑

树表格的实现主要包含以下几个关键部分:

  • 数据处理:获取父节点、子节点的关系,计算层级信息
  • 视图更新:在UI中显示展开的节点,处理点击事件
  • 动态绑定:根据数据源实时更新树表格结构
  • 排序与过滤:支持对树表格数据进行排序

2.2 核心代码扩展

以下是FineUI Grid.cs中添加的主要代码段:

public bool EnableTree{    get    {        object obj = FState["EnableTree"];        return obj == null ? false : (bool)obj;    }    set    {        FState["EnableTree"] = value;        if (value)        {            EnableRowClickEvent = false;        }    }}public bool ExpandAll{    get    {        object obj = FState["ExpandAll"];        return obj == null ? true : (bool)obj;    }    set    {        FState["ExpandAll"] = value;        if (value)        {            EnableRowClickEvent = false;        }    }}private int GetLevelNub(GridRow row, GridRowCollection Rows){    int lub = 0;    int IDindex = FindColumn(TreeDataIDField).ColumnIndex;    int ParentIDindex = FindColumn(TreeDataParentIDField).ColumnIndex;    if (row.Values[ParentIDindex].ToString() == "" || row.Values[ParentIDindex].ToString() == "0")    {        return lub;    }    else    {        foreach (GridRow gr in Rows)        {            if (gr.Values[IDindex].ToString() == row.Values[ParentIDindex].ToString())            {                lub++;                int nub = GetLevelNub(gr, Rows);                lub += nub == 0 ? 1 : nub;            }        }    }    return lub;}private void SortTreeRows(){    List
sourceRows = new List
(); foreach (GridRow row in Rows) { sourceRows.Add(row); } Rows.Clear(); List
toList = new List
(); int pidindex = FindColumn(TreeDataParentIDField).ColumnIndex; int idindex = FindColumn(TreeDataIDField).ColumnIndex; for (int i = sourceRows.Count - 1; i >= 0; i--) { GridRow row = sourceRows[i]; if (row.Values[pidindex].ToString() == "" || row.Values[pidindex].ToString() == "0") { toList.Insert(0, row); sourceRows.RemoveAt(i); } } toList = InsertRowToList(toList, sourceRows, idindex, pidindex); toList.ForEach(p => Rows.Add(p)); for (int i = 0; i < Rows.Count; i++) { Rows[i].RowIndex = i; } toList.Clear(); toList = null;}

3. 测试页面的实现

以下是实现树表格的测试页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="FineUI.Examples.TestPage" %>

4. 后台代码配置

以下是后台代码的实现:

using System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;namespace FineUI.Examples{    public partial class TestPage : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            DataTable dt = new DataTable();            dt.Columns.Add("name", typeof(string));            dt.Columns.Add("id", typeof(int));            dt.Columns.Add("topID", typeof(string));            dt.Columns.Add("levelcode", typeof(string));            dt.Columns.Add("levelnub", typeof(int));            dt.Columns.Add("subitem", typeof(bool));            dt.Columns.Add("url", typeof(string));            DataRow dr1 = dt.NewRow();            dr1[0] = "首页";            dr1[1] = 1;            dr1[2] = 0;            dr1[3] = "0001";            dr1[4] = 0;            dr1[5] = false;            dr1[6] = "adfsdfds";            dt.Rows.Add(dr1);            DataRow dr2 = dt.NewRow();            dr2[0] = "测试页";            dr2[1] = 2;            dr2[2] = 0;            dr2[3] = "0002";            dr2[4] = 0;            dr2[5] = false;            dr2[6] = "adfsdfds";            dt.Rows.Add(dr2);            DataRow dr11 = dt.NewRow();            dr11[0] = "首页下级1";            dr11[1] = 3;            dr11[2] = 1;            dr11[3] = "00010001";            dr11[4] = 1;            dr11[5] = true;            dr11[6] = "adfsdfds";            dt.Rows.Add(dr11);            DataRow dr12 = dt.NewRow();            dr12[0] = "首页下级2";            dr12[1] = 4;            dr12[2] = 1;            dr12[3] = "00010002";            dr12[4] = 1;            dr12[5] = true;            dr12[6] = "adfsdfds";            dt.Rows.Add(dr12);            DataRow dr13 = dt.NewRow();            dr13[0] = "首页下级3";            dr13[1] = 5;            dr13[2] = 1;            dt.Rows.Add(dr13);            DataRow dr21 = dt.NewRow();            dr21[0] = "测试页下级1";            dr21[1] = 6;            dr21[2] = 2;            dr21[3] = "00020001";            dr21[4] = 1;            dr21[5] = true;            dr21[6] = "adfsdfds";            dt.Rows.Add(dr21);            DataRow dr22 = dt.NewRow();            dr22[0] = "测试页下级2";            dr22[1] = 7;            dr22[2] = 2;            dr22[3] = "00020002";            dr22[4] = 1;            dr22[5] = true;            dr22[6] = "adfsdfds";            dt.Rows.Add(dr22);            DataRow dr221 = dt.NewRow();            dr221[0] = "测试页下下级1";            dr221[1] = 8;            dr221[2] = 7;            dr221[3] = "00020002001";            dr221[4] = 2;            dr221[5] = true;            dr221[6] = "adfsdfds";            dt.Rows.Add(dr221);            DataRow dr00 = dt.NewRow();            dr00[0] = "00测试";            dr00[1] = 8;            dr00[2] = 14;            dr00[3] = "00020002001";            dr00[4] = 2;            dr00[5] = true;            dr00[6] = "adfsdfds";            dt.Rows.Add(dr00);            Grid1.DataSource = dt;            Grid1.DataBind();        }        protected void PageManager_CustomEvent(object sender, CustomEventArgs e)        {            if (e.EventArgument.IndexOf("GridTreeClick_") >= 0)            {                string rowindex = e.EventArgument.ToString().Split('_')[1];                Grid1.DoTreeClick(rowindex);            }        }    }}

5. 树表格的实现总结

通过以上代码扩展,可以实现一个功能完善的树表格。主要包括以下功能:

  • 展开/收缩树节点
  • 层级显示
  • 点击事件处理
  • 动态数据绑定
  • 排序与过滤

建议在实际项目中根据具体需求进行调整和优化,同时注意以下几点:

  • 数据源的获取与处理
  • UI布局与样式美化
  • 性能优化(尤其是在大数据量场景下)
  • 权限控制与安全性

通过以上实现,可以在FineUI的基础上,轻松构建出满足实际需求的树表格功能。

转载地址:http://zjvkz.baihongyu.com/

你可能感兴趣的文章
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
nginx配置全解
查看>>
Nginx配置参数中文说明
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>