热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

asp.net动态表单之数据分页

但是问题来了,不同科系的同学的科目是不一样的,那么我们在数据库设计的时候通常是把学生、某科成绩作为一条记录,那么这个时候我们就需要做一个行转
但是问题来了,不同科系的同学的科目是不一样的,那么我们在数据库设计的时候通常是把学生、某科成绩作为一条记录,那么这个时候我们就需要做一个行转列的逻辑处理了。

解决方法:
使用GridView来生成表单,这个实现起来会比较麻烦,如果要在列表里面显示链接就更不可能了;
生成html再输出到页面中,这个实现起来比较灵活、方便;
基本功能点:
动态生成表头;
数据进行分页;
查询数据;
对每个成绩进行超链接,查看明细;
代码如下:


  
  






后台代码(生成html字符串)
代码如下:

///
/// table方式加载考核成绩.
/// Step1:通过年月来获取唯一的批次.
/// Step2:生成表头.
/// Step3:开始循环每个用户.
/// Step4:循环每个用户的考核项.
///

protected void BindTable()
{
labtable.Text = string.Empty;
//通过年月来获取唯一的批次.
string year = DropDownImportYear.SelectedValue;
string mOnth= DropDownImportMonth.SelectedValue;
string group_KH_Date = year + month;
GroupService groupService = new GroupService();
DataTable dtGroup = groupService.GetByTemplateCodeAndGroup_KH_Date(TemplateCode, group_KH_Date);
if (dtGroup.Rows.Count > 0)
{
Guid groupID = (Guid)DbUtils.ToGuid(dtGroup.Rows[0]["ID"]);
int groupStutas = DbUtils.ToInt32(dtGroup.Rows[0]["GroupStutas"].ToString());
DataTable dtCells = personalGradeService.GetDistinctTemplateItemNameByGroupID(groupID);
GroupID = groupID.ToString();
if (dtCells.Rows.Count > 0)
{
int cellsCount = 0;//考核项数.
StringBuilder strtable = new StringBuilder();
strtable.AppendFormat("");
strtable.AppendFormat("");
strtable.AppendFormat("");
cellsCount = dtCells.Rows.Count;
for (int i = 0; i {
strtable.AppendFormat("
", dtCells.Rows[i]["Name"].ToString());
}
strtable.AppendFormat("");
DataTable dtGradeData = GetData(cellsCount);
int cursor = 1;//表示一个用户的第一条记录.
string userName = string.Empty;
string realName = string.Empty;
for (int i = 0; i{
if (cursor == 1)
{
userName = dtGradeData.Rows[i]["UserName"].ToString();
realName = dtGradeData.Rows[i]["RealName"].ToString();
strtable.AppendFormat("
", realName);
}
string id = dtGradeData.Rows[i]["ID"].ToString();
string templateItemCode = dtGradeData.Rows[i]["TemplateItemCode"].ToString();
strtable.AppendFormat("");
if (cursor cursor++;
else
{
strtable.AppendFormat("
");
cursor = 1;
}
}
strtable.AppendFormat("
用户名{0}
{0}");

string GradeData = dtGradeData.Rows[i]["GradeData"].ToString();
if (!string.IsNullOrEmpty(GradeData) && GradeData != "0")
{
GradeData=Math.Round(decimal.Parse(GradeData), 2).ToString();
//转换成两位小数
}
strtable.AppendFormat("{0}", GradeData);
//未发布的成绩才能修改
if (groupStutas != (int)Botwave.MRPS.Constants.GroupStutas.FinishPush)
{
strtable.AppendFormat("
", groupID, TemplateCode, templateItemCode, userName);
strtable.AppendFormat("");
strtable.AppendFormat("
");
strtable.AppendFormat("
");
labtable.Text = strtable.ToString();
}
}
}


几个辅助方法(如何处理好分页问题,这就关系到cellsCount参数的使用了,cellsCount表示科目数)
代码如下:

protected void btnSearch_Click(object sender, EventArgs e)
{
SearchNow = true;
VirtualPager1.CurrentPageIndex = 1;
BindTable();
}
protected void VirtualPager1_PageIndexChanged(object sender, Botwave.Web.Controls.PageChangedEventArgs e)
{
BindTable();
}
///
/// 获取考核成绩.
///

///
private DataTable GetData(int cellsCount)
{
int nRecordCount = 0;
string cOndition= "";
string filterName = txtUserName.Text.Trim();//姓名搜索.
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" GroupID ='{0}'", GroupID);
if (!string.IsNullOrEmpty(filterName))
sb.AppendFormat(" AND (UserName like '%{0}%' OR RealName like '%{0}%')", filterName);
cOndition= sb.ToString();
if (SearchNow)//当在很多页的时候,或者是最后一页,这个时候来点击查询,就会报错了CurrentPageIndex,这个做法就是为了防止这个.
VirtualPager1.CurrentPageIndex = 0;
DataTable dt = personalGradeService.GetGradeData(VirtualPager1.CurrentPageIndex, VirtualPager1.ItemsPerPage * cellsCount, condition, ref nRecordCount);
VirtualPager1.TotalRecordCount = nRecordCount / cellsCount;
VirtualPager1.DataBind();
SearchNow = false;//要重新复制.
return dt;
}

业务逻辑(分页)
代码如下:

public System.Data.DataTable GetGradeData(int currentPageIndex, int pageSize, string condition, ref int nRecordCount)
{
string fieldShow = " UserID,TemplateCode,TemplateItemCode,GradeData,ID,UserName,RealName ";
string fieldOrder = " UserName ASC,TemplateItemCode ASC ";
string where = condition;
if (String.IsNullOrEmpty(where))
{
where = "1=1";
}
return IBatisDbHelper.GetPagedList("dbo.vw_UserGradeData", "ID", currentPageIndex, pageSize, fieldShow, fieldOrder, where, ref nRecordCount);
}

注意事项:
在使用来在页面输出html来显示表单的话,要注意字符串的长度,如果html太长的话,就会出错了,因为Literal的有8000个字符的限制的;
在数据库中对数据进行好排序,这样才能保证数据跟表头是一一对应的;
这里有个前提,那就是查询出来的数据都是包含同等多的记录的,比如同学A和同学B的科目是一样多的;因为不一样多,那这个动态表单就没什么意义了。如果真的有不同,也是可以做出来的,但是会麻烦一点;
推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 电销机器人作为一种人工智能技术载体,可以帮助企业提升电销效率并节省人工成本。然而,电销机器人市场缺乏统一的市场准入标准,产品品质良莠不齐。创业者在代理或购买电销机器人时应注意谨防用录音冒充真人语音通话以及宣传技术与实际效果不符的情况。选择电销机器人时需要考察公司资质和产品品质,尤其要关注语音识别率。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
author-avatar
四川im__miki
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有