如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能

实现ASP.NET DataGrid控件的可冻结标题与行列功能 DataGrid控件主要用于显示和编辑数据集。开发者可以通过简单地绑定数据源到DataGrid控件,并使用内置属性和方法来实现诸如排序、分页和自定义列等丰富的功能。DataGrid是处理数据表格显示和操作场景的理想选择。在当今竞争激烈的IT行业,开发效率和用户体验是产品成功的关键因素。自定义控件的引入,正是为了解决标准控件在特定场景下的不足,并提供更加灵活、强大的功能。通过使用自定义DataGrid控件,开发者可以实现更加复杂的布局和交互,同时减少代码量和错误率。 阅读详情

    步入IT业已经有几年的时间了,从最早接触pb6.0到现在.Net技术,计算机技术不论是从硬件还是软件都有巨大的进步.而中国程序员总体水平在世界上也是远远落后,其中缺乏完善的体系、必要的交流和程序员个人英雄主义的思想是主要原因.前不久在工作中遇到一个关于用DataGrid分类显示数据的问题,显示的样式入下图所示: 希望能为遇到类似问题的朋友提供一个解决方案,并掌握类似问题的解决方法.

问题剖析:

以上为例,每门课程属于不同的类别,需要将显示数据的第一项类别进行汇总显示.用标准的DataGrid是难于实现上述功能的.显然需要依靠自身来解决.

思路:

       归根到底,不论何种样式的表格显示,表现到前台都是Html的Table元素,因此如果能够在读取数据时动态确定Html样式,并通过Div将html生成到前台显示的话,就可以控制复杂的显示.这里面其实包含了从已有显示的html反推到动态html生成的过程.

源代码及注释:

定义类保存类别名字和数据条数

     public class KeyVal
 {
  private string m_Skey;
  private string m_SVal;
  public string strKey
  {
   get
   {
    return m_Skey;
   }
   set
   {
    m_Skey=value;
   }
  }
  public string strVal
  {
   get
   {
    return m_SVal;
   }
   set
   {
    m_SVal=value;
   }
  }
  public KeyVal()
  {}
  public KeyVal(string SKey,string SVal)
  {
   strKey=SKey;
   strVal=SVal;
  }
 }

测试页代码和相关函数

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Security.Principal;
using Microsoft.Web.UI.WebControls; 
using System.Text;

namespace EisWebSite.WebInternet
{
 /// <summary>
 /// ClassCourse 的摘要说明。
 /// </summary>
 public class ClassCourse : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DropDownList SpecialtyID;
  protected System.Web.UI.HtmlControls.HtmlGenericControl MainDiv;
  
  //
  #region 页面初始化
  private void Page_Load(object sender, System.EventArgs e)
  {
   
   if (!Page.IsPostBack)
   {
    AppGlobal.CBoxFillSpecialtyData(ref this.SpecialtyID,true);
   }
  }

  #endregion

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.SpecialtyID.SelectedIndexChanged += new System.EventHandler(this.SpecialtyID_SelectedIndexChanged);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

  private string CreateOutHtml()
  {
   

   //取出类型数目以及名称
   DataSet dSet=new DataSet();
    
   dSet=添加自己的获取数据集的函数(灵活设计Sql语句)结果为类型、数目

//AppGlobal.AppSysWebService.ClassCourseTeacherMainFilters(Item);
   

ArrayList mList=new ArrayList();
   
   foreach(DataRow dRow in dSet.Tables[0].Rows)
   {
    KeyVal mObj=new KeyVal();
    mObj.strKey=dRow[0].ToString();
    mObj.strVal=dRow[1].ToString();
    mList.Add(mObj);
   }
   
    StringBuilder OutHtml=new StringBuilder();
   dSet=添加自己的数据集函数.注意数据的排序方式与上同

//AppGlobal.AppSysWebService.ClassCourseTeacherFilters(Item);
   //添加固定表头
   OutHtml.Append("<table cellspacing='0' cellpadding='0' align='center' rules='all' bordercolor='black' border='1'"
    +"id='GRid'"+
    " style='word-break:break-all; BORDER-RIGHT:black 1px solid; BORDER-TOP:black 1px solid; BORDER-LEFT:black 1px solid; WIDTH:100%; BORDER-BOTTOM:black 1px solid; BORDER-COLLAPSE:collapse'>"
    );
   OutHtml.Append("<table cellspacing='0' cellpadding='0' align='center' rules='all' bordercolor='black' border='1'"
    +"id='AGRid'"+
    " style='word-break:break-all;BORDER-RIGHT:black 1px solid; BORDER-TOP:black 1px solid; BORDER-LEFT:black 1px solid; WIDTH:100%; BORDER-BOTTOM:black 1px solid; BORDER-COLLAPSE:collapse'>");
   OutHtml.Append("<tr align='center'>"+
    "<td width='87' style='WIDTH: 87px; HEIGHT: 34px'>类别</td>"+
    "<td style='WIDTH: 253px; HEIGHT: 34px'>课程编号</td>"+
    "<td style='WIDTH: 280px; HEIGHT: 34px'>课程名称</td>"+
    "<td style='WIDTH: 86px; HEIGHT: 34px'>学分</td>"+
    "<td style='WIDTH: 140px; HEIGHT: 34px' >"+
    "<table width='100%' height='100%' cellpadding='0' cellspacing='0'>"+
    "<tr>"+
    "<td align='center'width='33%' ></td>"+
    "<td align='center'width='33%'>学期</td>"+
    
    "<td align='center'width='33%' ></td>"+
    "</tr>"+
    "<tr>"+
    "<td align='center' width='33%'>I</td>"+
    "<td align='center' width='33%'>II</td>"+
    "<td align='center' width='33%'>III</td>"+
    "</tr>"+
    "</table>"+
    "</td>"+
    "<td style='WIDTH: 86px; HEIGHT: 34px'>教师名称</td>"+
    "</tr>");
   OutHtml.Append("</table><table cellspacing='0' cellpadding='0' align='center' rules='all' bordercolor='black' border='1'"
    +"id='bGRid'"+
    " style='word-break:break-all;BORDER-RIGHT:black 1px solid; BORDER-TOP:black 1px solid; BORDER-LEFT:black 1px solid; WIDTH:775px; BORDER-BOTTOM:black 1px solid; BORDER-COLLAPSE:collapse'>");
   
   string SrcType="";
   string NewType="";
   foreach(DataRow dRow in dSet.Tables[0].Rows)
   {
    OutHtml.Append("<tr align='center' height='24px' style='word-break:break-all;'> ");
    
    NewType=dRow["KeyValue"].ToString();

    if (SrcType!=NewType)
     OutHtml.Append("<td width='80' style='WIDTH: 80px; HEIGHT: 34px' rowspan="+SeachObj(dRow["KeyValue"].ToString(),mList).strVal+">"+SeachObj(dRow["KeyValue"].ToString(),mList).strKey+"</td>");
    SrcType=NewType;
    
    OutHtml.Append("<td width=231px >"+dRow["courseID"].ToString()+"</td>");
    OutHtml.Append("<td width=255px>"+dRow["courseName"].ToString()+"</td>");
    OutHtml.Append("<td width=80px>"+dRow["credit"].ToString()+"</td>");
    //    OutHtml.Append("<td width=100px>");
    //    OutHtml.Append("<table width='110' height='100%' cellpadding='0' cellspacing='0' bordercolor='black' border='1'>"+
    //     "<tr>");
    switch (Convert.ToInt16(dRow["coursetime"].ToString(),10))
    {
      
     case 1:
      OutHtml.Append("<td width=43px>√"+"</td>");
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=43px></td>");
      break;
     case 2:
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=43px>√"+"</td>");
      OutHtml.Append("<td width=43px></td>");
      break;
     case 3:
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=3px>√"+"</td>");
      break;
     default:
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=43px></td>");
      OutHtml.Append("<td width=43px></td>");
      break;
    }
//    OutHtml.Append("</tr></table>");
    //    OutHtml.Append("</td>");
    OutHtml.Append("<td width=79px style='word-break:break-all;'>"+dRow["TName"].ToString()+"</td>");
    OutHtml.Append("</tr>");
   }
   //添加固定表尾部
   OutHtml.Append("</table>");
   OutHtml.Append("</table>");
   //
   //   DGRid.DataSource=dSet;
   //   DGRid.DataBind();
   return OutHtml.ToString();
  }
  private KeyVal SeachObj(string strKey, ArrayList mList)
  {
   for (int i=0;i<=mList.Count-1;i++)
   {
    if (((KeyVal)mList[i]).strKey==strKey)
     return (KeyVal)mList[i];
   }
   return null;
  }

  

  }

}

EasyUI中dataGrid自定义重画与搜索功能实现详解 { field: 'orderId', title: '编号', width: 100 },title: '金额',width: 80,},title: '状态',]] 阅读详情

相关推荐

PB和HTML做的电子笔记本

很久很久以前,我想做一个电子笔记本,用来收集、摘抄和归类文章,最后也做出来了。pb9开发,内嵌了一个Html编辑器用来编辑文档,利用Access做数据库,并用PB和js做了一个网页插件(后来不好用了,可能是IE升级和安全的缘故),可以触发运行并下载网页内容和图片,批量多线程下载,还用BCB写了个解析网页和找窗口的DLL。 直到CSND出现网摘这个东西后,我也不使用这个东东了,现在共享出来提供大家学习。

pb 数据窗口生成html,PB 数据窗口数据导出到word文件中.doc

PB 数据窗口数据导出到word文件中PB 数据窗口数据导出到word,excel博客分类:powerbuilderExcelJ#WindowsPB 数据窗口数据导出到word,excel, excel 可以自定义修改excel文档的列宽对齐方式,字体样式等// dwsave2word 调用oleglobal type gf_exportdata2word from function_obje...

weixin_33093403的博客 723

pb11.5 嵌入ole控件web browser 通过html页面打开窗口

pb11.5 嵌入web browser, 通过html打开窗口 中的预定义的id值来判断需要打开的窗口

html动态调用数据库中的数据类型,如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能-.NET教程,数据库应用...

步入it业已经有几年的时间了,从最早接触pb6.0到现在.net技术,计算机技术不论是从硬件还是软件都有巨大的进步.而中国程序员总体水平在世界上也是远远落后,其中缺乏完善的体系、必要的交流和程序员个人英雄主义的思想是主要原因.前不久在工作中遇到一个关于用datagrid分类显示数据的问题,显示的样式入下图所示: 希望能为遇到类似问题的朋友提供一个解决方案,并掌握类似问题的解决方法.问题剖析:以上为...

weixin_26704885的博客 384

html 加 js实现表格增删和统计

可以用于工作中,减轻工作量

用PY32F003F18的PWM互补输出驱动无刷电机,保姆级配置流程(含代码)

本文详细介绍了如何利用PY32F003F18微控制器的TIM1定时器配置PWM互补输出功能来驱动三相无刷电机,涵盖硬件设计、代码实现及六步换相算法。通过保姆级配置流程和实用代码示例,帮助开发者快速掌握无刷电机驱动技术,适用于工业自动化和消费电子等领域。

weixin_26905487的博客 381

pb 打印html页面,用PB开发WEB应用

用PB开发WEB应用用PB开发WEB应用烟台教育学院网络中心 孙连三一、PB Window plug -in 的用途PowerBuilder Window plug -in 的用途是在HTML 页面中插入PowerBuilder 中定义的窗口对象,此窗口对象上定义的功能在浏览器中一样被执行,相当于在浏览器客户端执行PowerBuilder 应用,因此可以将PowerBuilder 应用发布到W...

weixin_29178069的博客 1543

Halcon实战:5分钟搞定工业零件中的圆孔检测(附完整代码)

本文详细解析了如何利用Halcon的hough_circle算法在5分钟内高效完成工业零件中的圆孔检测。通过优化图像采集、智能预处理和参数化边缘检测,解决了金属反光、油污干扰等工业场景常见问题,并提供了完整的代码示例和实战案例,显著提升检测精度和效率。

weixin_29061997的博客 239

如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能 activeandbadboy [原作]...

如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能     activeandbadboy [原作]    步入IT业已经有几年的时间了,从最早接触pb6.0到现在.Net技术,计算机技术不论是从硬件还是软件都有巨大的进步.而中国程序员总体水平在世界上也是远远落后,其中缺乏完善的体系、必要的交流和程序员个人英雄主义的思想是主要原因.前不久在工作中遇到一个关于用DataGrid分...

weixin_34376986的博客 89

保姆级教程:用GATK4分析重测序数据,从fq.gz到vcf文件一步不落

本文提供了一份详细的GATK4重测序数据分析教程,涵盖从原始fq.gz文件到最终vcf文件的完整上游分析流程。通过Miniconda环境配置、数据质控、序列比对、变异检测等步骤的逐步指导,帮助生物信息学研究人员掌握标准流程,特别适合Linux命令行基础薄弱的研究者学习实践。

weixin_28366053的博客 484

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 570

如何通过动态生成Html灵活实现DataGrid分类统计的界面

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 453

Python全栈入门到实战【进阶篇 1】类与对象:面向对象编程的基石

Python中定义类使用**class关键字**,创建对象使用**类名()**(类似调用函数),语法简洁,我们从最基础的空类开始,逐步拆解。class# 定义空的学生类,pass表示占位,无实际内容 class Student : pass编码规范:类名遵循大驼峰命名法(每个单词首字母大写,无下划线),如StudentCarPhone,这是Python官方推荐的PEP8规范,便于区分类和其他标识符。实例方法必须定义在类内部;实例方法的第一个参数必须是self(名称可自定义,如this。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3405

DataGrid排训功能讲解

在三种控件当中,DataGrid是迄今为止功能最为丰富的,但也是最不灵活的控件。这种在输出HTML时不够灵活的特点是因为它最初就是被设计成以表格的形式输出数据。每一条记录输出时会建立一对<tr>标签,而每个字段的值输出时则建立一对<td>标签。 DataGrid含有几个属性可以提高其可用性。如,通过设置DataGrid的AllowSorting属性为true,并加入少量代码...

weixin_30826761的博客 119

【GlobalMapper精品教程】027:路径剖面和和视线工具的使用

路径剖面视线工具允许您使用加载的高程数据集沿用户指定的路径获取垂直剖面。要定义生成3D路径剖面所遵循的路径,只需单击鼠标左键选择路径的点,然后石键单击以结束路径。出现一个带有剖面的对话框,允许您设置视线分析或优化端点。

智慧空间实验室 2051

TVS 管击穿电压与钳位电压的工程解析

TVS二极管的核心参数击穿电压(VBR)和钳位电压(VC)常被混淆,但二者具有本质区别。VBR是

硬核科技 480

html里面column的超链接,DataGrid中实现超链接的3种方法

1.使用DataGrid中的超链接列—HyperLinkColumn相信很多人都使用过datagrid中的超链接列,它很好用,默认情况下只能传递一个参数,如下所示:从上可以看出,传递一个参数的超链接是很容易做到的。那么传递多个参数该如何做?2.在DataGrid的ItemDataBound事件中对超链接列赋值假设有一个id为DataGrid1的Datagrid,第一列为超链接列(下标为0),那么它...

weixin_39528994的博客 431

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

DataGrid,DataList,Repeater的比较

摘自:http://www.yourblog.org/Data/20046/91516.htmlDataGridItem类继承自TableRow类,也就是说,每个DataGridItem的实例或多或少地可以看成一个表格中的一行。这是因为DataGrid被设计成可以借助HTML中的标签以表格的形式显示数据,因此每条记录就是一个表格行。而Repeater则被设计成可以自由定义数据输出的方式。所以,Re

Megres的专栏 2210

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

改善DataGrid的默認分頁使其更友好

改善DataGrid的默認分頁使其更友好        DataGrid是.net平台下開發Web應用程序最常用的控件,使用該控件可以幫助您專注與商務邏輯的開發,數據的顯示交給它來處理就好了,隻要簡單的設置一些相關的屬性,一張漂亮的表格就出來了,同時,它提供的模板列更大的提高了它的可編程性,使我們的設計更加靈活,想想都覺得這是一件興奮的事!然而,令人感覺美中不足的是,它的分頁功能實在是不怎麼樣,光

风帆的Blog 2157

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: .Net下的算术表达式解析器的实现思路与源码
activeandbadboy
博客等级 码龄24年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值