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

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

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 301 永久重定向
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>
Nginx gateway集群和动态网关
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>
Nginx Lua install
查看>>
nginx net::ERR_ABORTED 403 (Forbidden)
查看>>
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 多端口配置和访问异常问题的排查与优化
查看>>
Nginx 如何代理转发传递真实 ip 地址?
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>