在水晶报表中实现任意选择指定字段显示-模板及C#升级版
生活随笔
收集整理的這篇文章主要介紹了
在水晶报表中实现任意选择指定字段显示-模板及C#升级版
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前文《在水晶報表中實現(xiàn)任意選擇指定字段顯示》中有朋友留言說是有無C#版本,最近有時間,重寫了一下。
一是使用了VS2005 C#2.0 + Crystal Report 2008,另外就是把模板的實現(xiàn)方式也更改了一下。
在這里就不一步一步講了,模板的實現(xiàn)方式和xsd文件及mdb文件,請從《在水晶報表中實現(xiàn)任意選擇指定字段顯示》一文中下載
不過模板在這里做一下說明,本文中的模板中的表頭部分,未使用參數(shù)字段,而是使用了公式字段。
如下圖所示
最終效果為
各控件都使用了默認名稱,主要的事件為Click
CR2008自動增加如下代碼
1using?CrystalDecisions.Shared;
2using?CrystalDecisions.CrystalReports.Engine;
3using?CrystalDecisions.Windows.Forms;
?2????????{
?3
?4????????????
?5????????????String?cnstr?=?"";
?6????????????//保持字段的字符串?
?7????????????String?fldstr?=?"";
?8????????????//保持字段名稱的數(shù)組?
?9????????????String[]?fldArr=new?string[6]?;
10????????????int?i?=?0;
11????????????int?j?=?0;
12?????????????
13????????????
14
15????????????//---------------------------------------------------------------------?
16????????????//獲取選取的字段并進行處理?
17????????????if?(checkBox1.Checked?==?true)
18????????????????fldstr?=?fldstr?+?","?+?checkBox1.Text;
19????????????if?(checkBox2.Checked?==?true)
20????????????????fldstr?=?fldstr?+?","?+?checkBox2.Text;
21????????????if?(checkBox3.Checked?==?true)
22????????????????fldstr?=?fldstr?+?","?+?checkBox3.Text;
23????????????if?(checkBox4.Checked?==?true)
24????????????????fldstr?=?fldstr?+?","?+?checkBox4.Text;
25????????????if?(checkBox5.Checked?==?true)
26????????????????fldstr?=?fldstr?+?","?+?checkBox5.Text;
27????????????if?(checkBox6.Checked?==?true)
28????????????????fldstr?=?fldstr?+?","?+?checkBox6.Text;
29
30????????????if?(fldstr?==?"")?{
31????????????????MessageBox.Show("請選擇要顯示的字段");
32????????????????return;
33????????????}
34
35????????????if?(fldstr.Substring(0,?1)?==?",")?
36????????????????fldstr?=?fldstr.Substring(1,?fldstr.Length?-?1);
37
38????????????fldArr?=?fldstr.Split(new?Char[]?{','});
39
40?????????????cnstr=?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?Application.StartupPath?+?"\\BBT_Crystal.mdb"?;
41????????????OleDbConnection?cn=new?OleDbConnection(cnstr);
42????????????cn.Open();
43
44????????????string?sql="";
45????????????sql="?Select?"?+?fldstr?+?"?From?材料采購明細"?;
46
47????????????OleDbDataAdapter?da1=new?OleDbDataAdapter(sql,cn);
48
49????????????DataSet?ds1=new?DataSet();
50????????????da1.Fill(ds1,?"材料采購明細");
51?
52
53????????????CrystalReport1?crReportDocument=new?CrystalReport1();
54
55
56????????????for(i=0;i<fldArr.Length;i++)
57????????????{
58????????????
59???????????????//?將公式綁定到具體字段?
60????????????????crReportDocument.DataDefinition.FormulaFields["mf"?+?(i?+?1).ToString()].Text?=?"{材料采購明細."?+?fldArr[i]?+"}"?;
61????????????????crReportDocument.DataDefinition.FormulaFields["mt"?+?(i?+?1).ToString()].Text?=?"\""?+?fldArr[i]?+?"\"";
62????????????}
63
64????????????for?(j?=i+?1;?j?<=?6;?j++)
65????????????{
66????????????????crReportDocument.DataDefinition.FormulaFields["mt"?+?(j).ToString()].Text?=?"";
67????????????}
68
69????????????crReportDocument.SetDataSource(ds1);
70????????????crystalReportViewer1.ReportSource=crReportDocument;??????????
71
72????????}
一是使用了VS2005 C#2.0 + Crystal Report 2008,另外就是把模板的實現(xiàn)方式也更改了一下。
在這里就不一步一步講了,模板的實現(xiàn)方式和xsd文件及mdb文件,請從《在水晶報表中實現(xiàn)任意選擇指定字段顯示》一文中下載
不過模板在這里做一下說明,本文中的模板中的表頭部分,未使用參數(shù)字段,而是使用了公式字段。
如下圖所示
最終效果為
各控件都使用了默認名稱,主要的事件為Click
CR2008自動增加如下代碼
1using?CrystalDecisions.Shared;
2using?CrystalDecisions.CrystalReports.Engine;
3using?CrystalDecisions.Windows.Forms;
Click事件代碼:
?2????????{
?3
?4????????????
?5????????????String?cnstr?=?"";
?6????????????//保持字段的字符串?
?7????????????String?fldstr?=?"";
?8????????????//保持字段名稱的數(shù)組?
?9????????????String[]?fldArr=new?string[6]?;
10????????????int?i?=?0;
11????????????int?j?=?0;
12?????????????
13????????????
14
15????????????//---------------------------------------------------------------------?
16????????????//獲取選取的字段并進行處理?
17????????????if?(checkBox1.Checked?==?true)
18????????????????fldstr?=?fldstr?+?","?+?checkBox1.Text;
19????????????if?(checkBox2.Checked?==?true)
20????????????????fldstr?=?fldstr?+?","?+?checkBox2.Text;
21????????????if?(checkBox3.Checked?==?true)
22????????????????fldstr?=?fldstr?+?","?+?checkBox3.Text;
23????????????if?(checkBox4.Checked?==?true)
24????????????????fldstr?=?fldstr?+?","?+?checkBox4.Text;
25????????????if?(checkBox5.Checked?==?true)
26????????????????fldstr?=?fldstr?+?","?+?checkBox5.Text;
27????????????if?(checkBox6.Checked?==?true)
28????????????????fldstr?=?fldstr?+?","?+?checkBox6.Text;
29
30????????????if?(fldstr?==?"")?{
31????????????????MessageBox.Show("請選擇要顯示的字段");
32????????????????return;
33????????????}
34
35????????????if?(fldstr.Substring(0,?1)?==?",")?
36????????????????fldstr?=?fldstr.Substring(1,?fldstr.Length?-?1);
37
38????????????fldArr?=?fldstr.Split(new?Char[]?{','});
39
40?????????????cnstr=?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?Application.StartupPath?+?"\\BBT_Crystal.mdb"?;
41????????????OleDbConnection?cn=new?OleDbConnection(cnstr);
42????????????cn.Open();
43
44????????????string?sql="";
45????????????sql="?Select?"?+?fldstr?+?"?From?材料采購明細"?;
46
47????????????OleDbDataAdapter?da1=new?OleDbDataAdapter(sql,cn);
48
49????????????DataSet?ds1=new?DataSet();
50????????????da1.Fill(ds1,?"材料采購明細");
51?
52
53????????????CrystalReport1?crReportDocument=new?CrystalReport1();
54
55
56????????????for(i=0;i<fldArr.Length;i++)
57????????????{
58????????????
59???????????????//?將公式綁定到具體字段?
60????????????????crReportDocument.DataDefinition.FormulaFields["mf"?+?(i?+?1).ToString()].Text?=?"{材料采購明細."?+?fldArr[i]?+"}"?;
61????????????????crReportDocument.DataDefinition.FormulaFields["mt"?+?(i?+?1).ToString()].Text?=?"\""?+?fldArr[i]?+?"\"";
62????????????}
63
64????????????for?(j?=i+?1;?j?<=?6;?j++)
65????????????{
66????????????????crReportDocument.DataDefinition.FormulaFields["mt"?+?(j).ToString()].Text?=?"";
67????????????}
68
69????????????crReportDocument.SetDataSource(ds1);
70????????????crystalReportViewer1.ReportSource=crReportDocument;??????????
71
72????????}
使用公式構造表頭字段節(jié)約了不少代碼,呵呵。
當然這只是個程序模型~~
-EOF-
轉載于:https://www.cnblogs.com/babyt/archive/2008/01/03/1024941.html
總結
以上是生活随笔為你收集整理的在水晶报表中实现任意选择指定字段显示-模板及C#升级版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 避免DateTimePicker闪烁的解
- 下一篇: Web设计模式