最近因为工作需求,要制作一个网页模板,主要是用于快速开发,可以查询Sql数据表信息的模板,

昨天做好了,这个只是一个Demo,但是功能已经齐全了,

开发新的网站时,需要新增一个xml,复制粘贴网页的前端和后台,注意,前端的样式和逻辑还是要分开写的。

这样,基本上在10分钟以内,就能开发一个新的网页(只有核心的查询功能)。

这是效果图:

下面记录一下这个Demo:

首先是要在Web项目的web.config中配置数据库的连接字符串和xml文件名:

 <appSettings>
<add key="xmlDir" value="xml"/>
</appSettings>
<connectionStrings>
<add name="connStr" connectionString="Data Source=10.76.25.XX;DATABASE=XXX;Persist Security Info=True;User ID=sa;Password=XXXXXX;Max Pool Size=300;" providerName="System.Data.SqlClient"/>
</connectionStrings>

接着,我有做好了一个帮助类QueryHelper:

 using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Xml.Linq; namespace Cong.Utility
{
public delegate void DelegatePageIndexChange(object obj, GridViewPageEventArgs e); public class QueryHelper
{
private string xmlName { get; set; }
private Page page { get; set; }
private GridView gv { get; set; } private DelegatePageIndexChange dele; public QueryHelper(string xmlName, Page page, DelegatePageIndexChange dele)
{
this.xmlName = xmlName;
this.page = page;
this.gv = page.FindControl("gv") as GridView;
this.dele = dele; gv.PageIndexChanging += Gv_PageIndexChanging;
} public void BindData(object objIndex)
{
var xmlDir = ConfigurationManager.AppSettings["xmlDir"];
//获取xml节点
string path = AppDomain.CurrentDomain.BaseDirectory + (xmlDir == null ? "" : (xmlDir.ToString() + "\\")) + xmlName;
if (!File.Exists(path))
throw new Exception("xml is not exist."); XDocument xdoc = XDocument.Load(path);
XElement root = xdoc.Root; //获取基本查询语句的变量
string tableName = root.Element("tableName").Value;
string topNumber = root.Element("top").Value; //拼接where条件语句
List<string> conditions = new List<string>();
List<SqlParameter> ps = new List<SqlParameter>();
foreach (var ele in root.Element("field").Elements())
{
if (ele.Element("search").Value.Equals(""))
{
HtmlInputText tb = page.FindControl("search_" + ele.Name.ToString()) as HtmlInputText;
if (tb == null)
continue; if (!tb.Value.Trim().Equals(""))
{
conditions.Add(string.Format("{0} like '%'+@{0}+'%'", ele.Name.ToString()));
ps.Add(new SqlParameter("@" + ele.Name.ToString(), tb.Value.Trim()));
}
}
}
//是否有删除标识
foreach (var ele in root.Element("flag").Elements())
{
if (ele.Value.Equals(""))
conditions.Add(ele.Name + " " + ele.Value);
}
string strWhere = "";
if (conditions.Count > )
strWhere = "where " + string.Join(" and ", conditions.ToArray()); //拼接sort条件语句
List<string> sorts = new List<string>();
foreach (var ele in root.Element("sorts").Elements())
{
sorts.Add(ele.Element("field").Value + " " + ele.Element("type").Value);
}
string strOrderBy = "";
if (sorts.Count > )
strOrderBy = "order by " + string.Join(",", sorts.ToArray()); //拼接sql语句
string sql = string.Format("select top {0} * from {1} {2} {3}", topNumber, tableName, strWhere, strOrderBy);
DataTable dt = SqlHelper.ExecuteDataTable(sql, ps); BindGV(dt, root, objIndex);
} public void BindGV(DataTable dt, XElement root, object objIndex)
{
gv.DataSource = null;
gv.Columns.Clear();
gv.AutoGenerateColumns = false;
gv.AllowPaging = true;
gv.PageSize = int.Parse(root.Element("pageSize").Value); BoundField gvColumn = null;
foreach (var ele in root.Element("field").Elements())
{
if (ele.Element("visible").Value.Equals(""))
{
gvColumn = new BoundField();
gvColumn.HeaderText = ele.Element("cn").Value;
gvColumn.DataField = ele.Name.ToString();
gv.Columns.Add(gvColumn);
gvColumn = null;
}
} gv.DataSource = dt;
gv.PageIndex = objIndex == null ? : Convert.ToInt32(objIndex);
gv.DataBind();
} private void Gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
dele(sender, e);
BindData(e.NewPageIndex);
}
}
}

然后,是SqlHelper,这个就不放出来了,以前也发过。

接着创建一个xml,我是放在项目主目录下的“xml”文件夹内,内容如下:

 <?xml version="1.0" encoding="utf-8" ?>
<root>
<tableName>V_121_LOT_LIST</tableName>
<top>100</top>
<field>
<lot_id>
<cn>Id</cn>
<visible>0</visible>
<search>0</search>
</lot_id>
<lot_code>
<cn>批号</cn>
<visible>0</visible>
<search>0</search>
</lot_code>
<plan_qty>
<cn>生产数量</cn>
<visible>1</visible>
<search>1</search>
</plan_qty>
<now_qty>
<cn>当前数量</cn>
<visible>0</visible>
<search>1</search>
</now_qty>
</field>
<flag>
<state_flg>1</state_flg>
<del_flg>1</del_flg>
</flag>
<sorts>
<sort>
<field>lot_id</field>
<type>desc</type>
</sort>
</sorts>
<pageSize>20</pageSize>
</root>

最后,创建一个WebForm.aspx,

下面分别是后台和前端的代码:

 using Cong.Utility;
using System;
using System.Web.UI.WebControls; namespace QueryTemplet
{
public partial class lot : System.Web.UI.Page
{
private static string xmlName = "lot.xml"; protected QueryHelper qh = null; protected void Page_Load(object sender, EventArgs e)
{
qh = new QueryHelper(xmlName, this, Gv_PageIndexChanging);
qh.BindData(ViewState["pageIndex"]);
} private void Gv_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
ViewState["pageIndex"] = e.NewPageIndex;
} protected void btnSearch_Click(object sender, EventArgs e)
{
qh.BindData(ViewState["pageIndex"]);
}
}
}
 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="lot.aspx.cs" Inherits="QueryTemplet.lot" %>

 <!DOCTYPE html>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
Id:<input type="text" id="search_lot_id" runat="server" />
批号:<input type="text" id="search_lot_code" runat="server" />
<br />
<asp:Button Text="查找" ID="btnSearch" runat="server" OnClick="btnSearch_Click" />
</div>
<div>
<asp:GridView ID="gv" runat="server">
</asp:GridView>
</div>
</form>
</body>
</html>

前端的代码,自己再套上样式和编写js代码就可以使用了。

最后,也放出另一个效果图,我做好这个新的页面,只复制粘贴了几分钟。

就这些,欢迎交流。

源码下载:http://download.csdn.net/detail/cycong108/9739562

asp.net 查询sql数据表的网页模板的更多相关文章

  1. mysql中通过sql语句查询指定数据表的字段信息

      mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...

  2. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  3. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  4. Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

    应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...

  5. 【MySQL】MySQL中查询出数据表中存在重复的值list

    1.目的:查询MySQL数据表中,重复记录的值 2.示例: 3.代码: select serial_num,count(*) as count FROM card_ticket GROUP BY se ...

  6. 关于SQL 数据表中的密码加密

    首先,都知道一个字节(byte)等于八位二进制数.在数据表中将密码字段设置为binary类型,再结合哈希散列运算可以实现密码加密. 下面介绍下binary 和 varbinary: binary 和  ...

  7. 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net

    最近因为要开发大数据量网站,特作比较. Linq to SQL 查询 记录数:399997Linq to SQL 查询 Milliseconds:1910视图查询 记录数:399997视图查询 Mil ...

  8. SQL SERVER 查询所有数据表名称和数据行数

    SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.type ...

  9. qt: 获取sql数据表的所有的字段;

    1. mysql 数据库: 转载: https://www.cnblogs.com/fuqia/p/8994080.html mysql安装成功后可以看到已经存在mysql.information_s ...

随机推荐

  1. Sqoop Import原理和详细流程讲解

    Sqoop Import原理 Sqoop Import详细流程讲解 Sqoop在import时,需要指定split-by参数.Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域 ...

  2. Nginx 代理以及HTTPS (二)

    一.HTTPS解析 https 加密 私钥 公钥 http 的握手 是确认网络是连通的. https 的握手 是一个加密的过程 加密图 二. 使用Nginx 部署HTTPS 服务 1.证书生成命令(h ...

  3. 重写prototype原型后哪些东西改变了

    参考<JavaScript高级教程>实例看: 1.重写原型对象后,首先原型对象的constructor属性值(constructor的指向)会发生改变. function Person() ...

  4. 参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  5. leetCode 82.Remove Duplicates from Sorted List II (删除排序链表的反复II) 解题思路和方法

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  6. JAVA学习第五十四课 — IO流(八)打印流 &amp; 序列流

    一.综合练习-文件清单列表 获取指定文件夹下,指定扩展名的文件(含子文件夹),并将这些文件的绝对路径写到一个文本文件里.也就是建立一个指定扩展名的文件列表 1.深度遍历 2.过滤器->容器 3. ...

  7. vim中使用正則表達式

    一.使用正則表達式的命令 使用正則表達式的命令最常见的就是 / (搜索)命令. 其格式例如以下: /正則表達式 还有一个非常实用的命令就是 :s(替换)命令,将第一个//之间的正則表達式替换成第二个/ ...

  8. Android 计算Bitmap大小

    今天使用LruCache写demo的时候,要获取Bitmap的大小 于是就用到了 return bitmap.getRowBytes() * bitmap.getHeight();// 获取大小并返回 ...

  9. BZOJ3336: Uva10572 Black and White(插头Dp)

    解题思路: 分类讨论即可. 代码(懒得删Debug了): #include<map> #include<cstdio> #include<vector> #incl ...

  10. python自学群里遇到的小题汇总

    题目一: 请使在3秒内计算出一组的数据,偶数在奇数前(注意不使用for while等循环的方法)格式如下1,2,3,4,5,6,7,8,9,10输出结果是2,1,4,3,6,5,8,7,10,9 解决 ...