经典水晶报表--单击表头排序vs2005(2008年版本)

 

序:经典水晶报表--单击表头排序(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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值