经典水晶报表--单击表头排序vs2005(2008年版本)
2008-12-21 00:16
381 查看
序:经典水晶报表--单击表头排序(vs2005,2008年),这是一片继 海波 发表“经典水晶报表--单击表头排序”于 @ 2003年12月25日 10:26:00 ) 的首篇C#版本。若有人转载请注明出处。
本文的前提是,报表都能完全显示数据
1.单击表头的第一个字段:右键→设置对象格式,如下图
2.然后在“格式编辑器”中,超级链接→Internet上的网站(A),然后在“网站地址(I)”下面输入:“Flydragon0815.aspx?FieldName=Location”,本页面的名字:“Flydragon0815.aspx”,“FieldName”为参数的名字,也就是该字段的名称,“Flydragon0815.aspx”为要加载该报表的页面。
“Flydragon0815.aspx?FieldName=Location”这样写的目的是把“Location”这个名字传到的后台代码中,以便控制排序
3.这一步比较重要,在报表的空白处右键:报表→记录排序专家
4 把该字添加到“排序字段”中,提示:这一步较重要,其它字段排序时不用选了,选择这一个就可以了,如果多选的话,可能就不能排序了。
这些基本的操作完成后,
先看一下预览的界面,按Loaction排序前
按“Location”排序后:
稍后我会把源代码放上去,今天太晚了,呵呵,感兴趣的,可以先了解一下
今天是我的生日,算对自己的祝福吧,呵呵,晚上把代码整理出来了,加上了注释,方便大家了解:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
public partial class _Default : System.Web.UI.Page
{
public string g_MyConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyconnectionStrings"].ToString();
private static ReportDocument m_ReportDoc =new ReportDocument();
private static string m_strGetFldName = null;
private static bool m_FlagOrder = false;//用来判断排序的方式:AscendingOrder,DescendingOrder
private static bool m_FlagOverPage = false;//控制是否是“IsPostBack”的翻页标志
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (IsPostBack)
{
//获取缓存的报表
m_ReportDoc = (ReportDocument)Session["Report"];
if (m_ReportDoc == null)
{
ReportDoc_Bind();
}
m_strGetFldName = null;
this.crystalReportViewer.ReportSource = m_ReportDoc;
m_FlagOverPage = true;
}
if (m_FlagOverPage)
{
m_FlagOverPage = false;
}
else
{
if (m_ReportDoc != null)
{
m_strGetFldName = Request.QueryString["FieldName"];
if (m_strGetFldName != null)
{
GetFieldName(m_strGetFldName);
}
}
}
}
/// <summary>
/// 获得要排序的字段
/// </summary>
/// <param name="strFieldName"></param>
private void GetFieldName(string strFieldName)
{
try
{
FieldDefinition FieldDef = null;
FieldDef = m_ReportDoc.Database.Tables[0].Fields[strFieldName];//把从“数据库”中取的该字段赋给 FieldDef
m_ReportDoc.DataDefinition.SortFields[0].Field = FieldDef;//然后再赋给要排序的字段名称
if (m_FlagOrder == false)
{
m_ReportDoc.DataDefinition.SortFields[0].SortDirection = CrystalDecisions.Shared.SortDirection.AscendingOrder;
m_FlagOrder = true;
}
else
{
m_ReportDoc.DataDefinition.SortFields[0].SortDirection = CrystalDecisions.Shared.SortDirection.DescendingOrder;
m_FlagOrder = false;
}
crystalReportViewer.ReportSource = m_ReportDoc;
crystalReportViewer.ShowLastPage(); //获取页数
crystalReportViewer.ShowFirstPage();
}
catch (Exception ee)
{
Response.Write("<b><font color='#FF0000'>Operate Error!</font></b>");
}
}
/// <summary>
/// 绑定报表
/// </summary>
private void ReportDoc_Bind()
{
string sql = "select ct.XK_TEXT as Location, pt.XK_RECEIPT_DATE_TIME as DateStart, " +
" pt.XK_RECEIPT_DATE_TIME as DateEnd, pt.XK_PLU as Dept, pt.XK_RECEIPT_NUM as Receipt#, " +
" p.XK_TEXT as Item#, pt.XK_QUANTITY as Quantity, pt.XK_AMOUNT as Amount " +
" from XK_CASH_TERMINAL ct left outer join XK_POS_TRANSACTION pt on ct.XK_ID = pt.XK_CASH_TERMINAL_ID " +
" left outer join XK_PRODUCT p on pt.XK_PROD_CODE = p.XK_CODE where 1=1 and pt.XK_STATUS IS NULL ";
SqlConnection conn = new SqlConnection(g_MyConnection);
System.Data.SqlClient.SqlDataAdapter MyCommand = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
MyCommand.Fill(ds);
ReportDocument m_ReportDoc = new ReportDocument();
m_ReportDoc.Load(Server.MapPath("Crystalrpt.rpt"));
m_ReportDoc.SetDataSource(ds.Tables[0]);
Session["Report"] = m_ReportDoc;
conn.Close();
}
protected void btnOk_Click(object sender, EventArgs e)
{
ReportDoc_Bind();
this.crystalReportViewer.ReportSource = m_ReportDoc;//显示报表
}
}
本文的前提是,报表都能完全显示数据
1.单击表头的第一个字段:右键→设置对象格式,如下图
2.然后在“格式编辑器”中,超级链接→Internet上的网站(A),然后在“网站地址(I)”下面输入:“Flydragon0815.aspx?FieldName=Location”,本页面的名字:“Flydragon0815.aspx”,“FieldName”为参数的名字,也就是该字段的名称,“Flydragon0815.aspx”为要加载该报表的页面。
“Flydragon0815.aspx?FieldName=Location”这样写的目的是把“Location”这个名字传到的后台代码中,以便控制排序
3.这一步比较重要,在报表的空白处右键:报表→记录排序专家
4 把该字添加到“排序字段”中,提示:这一步较重要,其它字段排序时不用选了,选择这一个就可以了,如果多选的话,可能就不能排序了。
这些基本的操作完成后,
先看一下预览的界面,按Loaction排序前
按“Location”排序后:
稍后我会把源代码放上去,今天太晚了,呵呵,感兴趣的,可以先了解一下
今天是我的生日,算对自己的祝福吧,呵呵,晚上把代码整理出来了,加上了注释,方便大家了解:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
public partial class _Default : System.Web.UI.Page
{
public string g_MyConnection = System.Configuration.ConfigurationManager.ConnectionStrings["MyconnectionStrings"].ToString();
private static ReportDocument m_ReportDoc =new ReportDocument();
private static string m_strGetFldName = null;
private static bool m_FlagOrder = false;//用来判断排序的方式:AscendingOrder,DescendingOrder
private static bool m_FlagOverPage = false;//控制是否是“IsPostBack”的翻页标志
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (IsPostBack)
{
//获取缓存的报表
m_ReportDoc = (ReportDocument)Session["Report"];
if (m_ReportDoc == null)
{
ReportDoc_Bind();
}
m_strGetFldName = null;
this.crystalReportViewer.ReportSource = m_ReportDoc;
m_FlagOverPage = true;
}
if (m_FlagOverPage)
{
m_FlagOverPage = false;
}
else
{
if (m_ReportDoc != null)
{
m_strGetFldName = Request.QueryString["FieldName"];
if (m_strGetFldName != null)
{
GetFieldName(m_strGetFldName);
}
}
}
}
/// <summary>
/// 获得要排序的字段
/// </summary>
/// <param name="strFieldName"></param>
private void GetFieldName(string strFieldName)
{
try
{
FieldDefinition FieldDef = null;
FieldDef = m_ReportDoc.Database.Tables[0].Fields[strFieldName];//把从“数据库”中取的该字段赋给 FieldDef
m_ReportDoc.DataDefinition.SortFields[0].Field = FieldDef;//然后再赋给要排序的字段名称
if (m_FlagOrder == false)
{
m_ReportDoc.DataDefinition.SortFields[0].SortDirection = CrystalDecisions.Shared.SortDirection.AscendingOrder;
m_FlagOrder = true;
}
else
{
m_ReportDoc.DataDefinition.SortFields[0].SortDirection = CrystalDecisions.Shared.SortDirection.DescendingOrder;
m_FlagOrder = false;
}
crystalReportViewer.ReportSource = m_ReportDoc;
crystalReportViewer.ShowLastPage(); //获取页数
crystalReportViewer.ShowFirstPage();
}
catch (Exception ee)
{
Response.Write("<b><font color='#FF0000'>Operate Error!</font></b>");
}
}
/// <summary>
/// 绑定报表
/// </summary>
private void ReportDoc_Bind()
{
string sql = "select ct.XK_TEXT as Location, pt.XK_RECEIPT_DATE_TIME as DateStart, " +
" pt.XK_RECEIPT_DATE_TIME as DateEnd, pt.XK_PLU as Dept, pt.XK_RECEIPT_NUM as Receipt#, " +
" p.XK_TEXT as Item#, pt.XK_QUANTITY as Quantity, pt.XK_AMOUNT as Amount " +
" from XK_CASH_TERMINAL ct left outer join XK_POS_TRANSACTION pt on ct.XK_ID = pt.XK_CASH_TERMINAL_ID " +
" left outer join XK_PRODUCT p on pt.XK_PROD_CODE = p.XK_CODE where 1=1 and pt.XK_STATUS IS NULL ";
SqlConnection conn = new SqlConnection(g_MyConnection);
System.Data.SqlClient.SqlDataAdapter MyCommand = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
MyCommand.Fill(ds);
ReportDocument m_ReportDoc = new ReportDocument();
m_ReportDoc.Load(Server.MapPath("Crystalrpt.rpt"));
m_ReportDoc.SetDataSource(ds.Tables[0]);
Session["Report"] = m_ReportDoc;
conn.Close();
}
protected void btnOk_Click(object sender, EventArgs e)
{
ReportDoc_Bind();
this.crystalReportViewer.ReportSource = m_ReportDoc;//显示报表
}
}
相关文章推荐
- 经典水晶报表设计——单击表头排序表格
- 经典水晶报表设计——单击表头排序表格
- 水晶报表:单击表头排序C#2.0版
- Asp.net2.0水晶报表(CrystalReports)事例源码大全(C#)VS2005版本
- 关于VS2005自带水晶报表版本的限制
- VS2005中使用水晶报表的PUSH模式完成带子报表的报表
- [转]VS2005下水晶报表实现动态数据源绑定
- 解决vs2005自带水晶报表次数的限制的次数
- 在没有vs2005环境里部署Crystal Reports 10水晶报表
- vs2005中水晶报表使用整理
- vs2005自带水晶报表 之 小问题解决方法
- 编写的vs2005水晶报表程序在vs2008下正常使用
- vs2005 加载水晶报表时总是弹出数据库登陆窗体的解决方案
- 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
- 水晶报表技术(2)——解决vs2005自带水晶报表次数的限制的次数
- 水晶报表基础入门——4.水晶报表排序、分组技术
- VS2005 开发水晶报表(初级)
- 经典水晶报表设计——纵向排列 + 多列格式化 + 设置“页边距”
- VS2005 水晶报表发布
- 【水晶报表之图片篇-a】 动态加载图片(图片文件版本及数据库版本)