原創|使用教程|編輯:王香|2018-07-18 16:11:47.000|閱讀 472 次
概述:如何使用自定義應用程序中的代碼在FastCube.Net中創建多維數據集
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在本文中,將介紹如何使用自定義應用程序中的代碼在FastCube.Net中創建多維數據集。多維數據集文件可以包含數據,讓我們看一下多維數據集創建的整個步驟。
下載最新版FastCube.Net
創建Windows窗體項目,在“References”中,需要添加指向libraries(庫)的鏈接:FastReport,FastReport.Bars,FastReport.Olap。 從工具欄中將以下控件添加到窗體: dataSource,dtDataSet,cube,slice,sliceGrid,button。

在dataSource1屬性中,找到DataSet并為其選擇可用的dtDataSet1。在cube1控件的屬性中,為DataSource選擇值dataSource1。對于SoutceType屬性,值為DataSource;在slice1屬性中,選擇Cube屬性的cube1值。調整sliceGrid1的大小,在其屬性中,選擇Slice的slice1值。
現在轉到Form(表單)代碼,首先,讓我們將libraries(庫)添加到Using部分:
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Windows.Forms; using FastReport.Olap.Slice;
將以下變量和對象添加到類中:
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; //symbol set private Random rnd = new Random(); //randomizer private DataTable dataTable = null; //data table object private int Dims = 4; //dimensions count private int Uniques = 500; //count of unique random values private int Measures = 4; //measures count private int Records = 10000; //table records count
用假數據填充表格,只是為了證明軟件數據生成的可能性。除DataTable外,還可以使用數據庫或流來檢索數據。
創建一個DataTable并用隨機數據填充它:
// The method of a random string generation
 private string GetNewStr(int len)
 {
 len = 1 + rnd.Next(len - 1);
 char[] resChars = new char[len];
 for (int i = 0; i < resChars.Length; i++)
 {
 resChars[i] = chars[rnd.Next(chars.Length)];
 }
 return new string(resChars);
 }
 
// The method of adding fields to a table
 private DataTable CreateDS()
 {
 DataTable dt = new DataTable("Test");
 for (int i = 0; i < Dims; i++)
 dt.Columns.Add("Dimension" + (i + 1), typeof(string));
 for (int i = 0; i < Measures; i++)
 dt.Columns.Add("Measure" + (i + 1), typeof(int));
 return dt;
 }
 
// Method of filling the table with data
 private DataTable BuildDS()
 {
 DataTable dt = CreateDS();
 
 int maxUniques = Uniques;
 SortedSet<string> randomStrings = new SortedSet<string>();
// Generating Unique Values
 while (randomStrings.Count < maxUniques)
 {
 randomStrings.Add(GetNewStr(10));
 }
 
 int dimCount = Dims;
 int mesCount = Measures;
 
 object[] values = new object[dimCount + mesCount];
// Filling a table with data
 for (int i = 0; i < Records; i++)
 {
 for (int j = 0; j < dimCount; j++)
 {
 if (i < maxUniques)
 values[j] = randomStrings.ElementAt(i);
 else
 values[j] = randomStrings.ElementAt(rnd.Next(dimCount));
 }
 for (int j = 0; j < mesCount; j++)
 {
 values[j + dimCount] = rnd.Next(255);
 }
 dt.Rows.Add(values);
 }
 return dt;
 }
現在用一個數據源,用戶可以使用數據庫中的表或視圖或數據流,向切片添加字段。
為表單上的唯一按鈕創建OnClick事件處理程序,并編寫以下代碼:
private void button1_Click(object sender, EventArgs e)
 {
// Add the generated table with the data in the DataSet
 cube1.Close();
 DataTable dt = BuildDS();
 if (dataTable != null)
 {
 dataTable.Dispose();
 dataTable = null;
 }
 dataTable = dt;
 
 dtDataSet1.DataTable = dataTable;
 dataSource1.DeleteFields();
 cube1.Open(); 
 dtDataSet1.DataTable = null;
 //Update slice
 slice1.BeginUpdate();
 //Add fields into the containers
 for (int i = 0; i < Dims; i++)
 {
 slice1.YAxisContainer.AddSliceField(slice1.SliceFields.GetFieldByIndex(i));
 }
//Add empty measures container onto X-axis
 slice1.XAxisContainer.AddMeasuresField();
//Add measures into the measures container
 for (int i = 0; i < Measures; i++)
 {
 slice1.MeasuresContainer.AddMeasure(new MeasureField(
 slice1,
 FastReport.Olap.Types.AggregateFunction.Sum,
 slice1.SliceFields.GetFieldByIndex(i + Dims),
 null,
 null,
 "Measure" + (i + 1),
 "Measure" + (i + 1),
 false
 ));
 }
 
 slice1.EndUpdate();
 //Save cube into a file
 cube1.Save("J:/Program Files (x86)/FastReports/FastCube.Net Professional/Demos/C#/test.mdc"); 
}
尺寸和度量存儲在單獨的容器中。首先,用尺寸填充YAxisContainer,在XAxisContainer中添加了一個空的度量列表。然后才開始用措施填補它。MeasureField類的構造函數的signature:public MeasureField(Slice slice,AggregateFunction aggregateFunction,SliceField baseSliceField,SliceField distinctSliceField,SliceField extraSliceField,string name,string caption,bool distinct);在代碼的最后一行,將多維數據集存儲在指定的文件中。
現在啟動應用程序并使用按鈕創建一個新的多維數據集:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn