读阿泰《动态(万能)水晶报表:任意表,任意列,动态格线调整》有感

不吃猫的耗子 2011-04-23 03:45:14
动态(万能)水晶报表:任意表,任意列,动态格线调整
http://topic.csdn.net/u/20090408/02/06b09ed9-b0c9-4870-9085-f9b3dd5c2c8a.html?92420
按照此教程,我成功制作了动态水晶报表。
问题:
1.显示的数据是所有的表列,如何不修改SQL语句(存储过程),显示指定列?
2.如何动态修改列名。
还望指点新人。。。 谢谢!
...全文
114 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿双2009 2011-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xyrrwcom 的回复:]
点击查询,显示第一页报表正常,再点击报表按钮下一页或导出,提示“您请求的报表需要更多信息.”[/Quote]

必须保存到缓存,参考:http://blog.csdn.net/luols/archive/2010/08/07/5796161.aspx
不吃猫的耗子 2011-04-25
  • 打赏
  • 举报
回复

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Web;
using System.Data.SqlClient;

public partial class DongtaiReport : System.Web.UI.Page
{
//protected void Page_Init(object sender, EventArgs e)
//{
// ConfigureCrystalReports();
//}

protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
String tblName = this.DropDownList1.Text;
string strProvider = "Server=./;DataBase=hunan;UID=sa;PWD=123456";
SqlConnection cn=new SqlConnection(strProvider);

SqlCommand cm = new SqlCommand();
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = tblName;
cm.Connection = cn;
cn.Open();
cm.Parameters.Add(new SqlParameter("@ReportID", '1'));
cm.Parameters.Add(new SqlParameter("@DateBeg", "2011-03-14"));
cm.Parameters.Add(new SqlParameter("@DateEnd", "2011-03-14"));
cm.Parameters.Add(new SqlParameter("@CurrentUser", null));
cm.Parameters.Add(new SqlParameter("@Checked", null));
cm.Parameters.Add(new SqlParameter("@UnChecked", null));
cm.Parameters.Add(new SqlParameter("@Item1", '2'));
cm.Parameters.Add(new SqlParameter("@Item1Beg", null));
cm.Parameters.Add(new SqlParameter("@Item1End", null));
cm.Parameters.Add(new SqlParameter("@Item2", null));
cm.Parameters.Add(new SqlParameter("@Item2Beg", null));
cm.Parameters.Add(new SqlParameter("@Item2End", null));
cm.Parameters.Add(new SqlParameter("@Item3", null));
cm.Parameters.Add(new SqlParameter("@Item3Beg", null));
cm.Parameters.Add(new SqlParameter("@Item3End", null));
cm.Parameters.Add(new SqlParameter("@Item4", null));
cm.Parameters.Add(new SqlParameter("@Item4Beg", null));
cm.Parameters.Add(new SqlParameter("@Item4End", null));
cm.Parameters.Add(new SqlParameter("@SQLFilter", null));
cm.Parameters.Add(new SqlParameter("@UserID", null));
cm.Parameters.Add(new SqlParameter("@FBillNo", null));
//String connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Threading.Thread.GetDomain().BaseDirectory + "bbtcrall.mdb" + ";";

if (tblName == "")
{
Response.Write("请选择表名");
this.DropDownList1.Focus();
return;
}

//打开数据库连接

DataTable dt1 = new DataTable();
DataTable dtx = new DataTable();


//打开选择的表(注意进行错误保护)

//如果要实现任意列,只要更改此处的SQL为具体的字段即可
//da = new OleDbDataAdapter("SELECT * From " + tblName, cn);
SqlDataAdapter da = new SqlDataAdapter(cm);
da.Fill(dt1);

//处理ds1
sqlDb.Class.clsDyCrystalReportCore xCore = new sqlDb.Class.clsDyCrystalReportCore();
dtx = xCore.dtx(dt1);

ReportDocument myReport = new ReportDocument();
string reportPath = System.Threading.Thread.GetDomain().BaseDirectory + "DongtaiReport.rpt";
myReport.Load(reportPath);

//绑定数据集,注意,一个报表用一个数据集。

myReport.SetDataSource(dtx);

CrystalReportViewer1.ReportSource = myReport;
CrystalReportViewer1.RefreshReport();
}
}


根据动态(万能)水晶报表:任意表,任意列,动态格线调整教程,成功实现了选择性报表查询功能,
问题:
点击查询,显示第一页报表正常,再点击报表按钮下一页或导出,提示“您请求的报表需要更多信息.”,要求填写数据库用户名、密码等信息,还要求各位大侠给分析分析,先谢谢了,单位急用。

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧