示例 8.手動填充矩陣
在我們看過的所有示例中,矩陣都是自動填充數(shù)據(jù)的,因?yàn)樗B接了數(shù)據(jù)源。矩陣的數(shù)據(jù)源在 "DataSource "屬性中顯示。雖然我們沒有手動設(shè)置該屬性的值,但在向矩陣添加數(shù)據(jù)列時(shí),數(shù)據(jù)源會隱式出現(xiàn)。
使用腳本可以手動填充矩陣。為此,需要?jiǎng)?chuàng)建矩陣的 "ManualBuild "事件處理程序。在處理程序代碼中調(diào)用 "AddValue "方法來添加數(shù)值。讓我們演示如何創(chuàng)建一個(gè)矩陣,打印出以下 10х10 表格:
1 2 3 ...
1 1
2 2
3 3
... ...
請執(zhí)行以下操作:
- 在報(bào)告中添加一個(gè)空矩陣;
- 將 "Data "窗口中的任意元素放入矩陣的行、列和單元格中。然后雙擊矩陣元素,調(diào)用表達(dá)式編輯器,清除表達(dá)式;
- 清除矩陣的 "DataSource"屬性。
這些步驟都是為了創(chuàng)建一個(gè)只有一行、一列和一個(gè)單元格的 "虛擬 "矩陣。因此,矩陣將如下所示:
現(xiàn)在建一個(gè) "ManualBuild "事件處理程序。為此,選擇矩陣,進(jìn)入 "Properties "窗口并按下按鈕。雙擊 "ManualBuild "事件,F(xiàn)astReport 將創(chuàng)建一個(gè)空的事件處理程序。在其中寫入以下代碼:
private void Matrix1_ManualBuild(object sender, EventArgs e) { // Our matrix has one level in row, column and cell. // Create 3 arrays of object[] type, each with one element // (per number of levels). object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1]; for (int i = 1; i <= 10; i++) { // Filling arrays columnValues[0] = i; rowValues[0] = i; cellValues[0] = i; // Adding data into the matrix Matrix1.AddValue(columnValues, rowValues, cellValues); } }
在處理程序中,應(yīng)使用 "Matrix "對象的 "AddValue "方法來填充數(shù)據(jù)。該方法有三個(gè)參數(shù),每個(gè)參數(shù)都是 System.Object 類型的數(shù)組。第一個(gè)參數(shù)是列值,第二個(gè)參數(shù)是行值,第三個(gè)參數(shù)是單元格值。請注意,每個(gè)數(shù)組中值的數(shù)量應(yīng)符合對象的設(shè)置!在我們的例子中,一個(gè)對象在列、行和單元格中都有一個(gè)級別,因此我們?yōu)榱?、行和單元格分別提供一個(gè)值。
運(yùn)行報(bào)告時(shí),我們將看到以下內(nèi)容:
讓我們演示如何在矩陣的第 7 列和第 3 行的交叉點(diǎn)上添加數(shù)值 "21"。為此,請按以下方式修改代碼:
private void Matrix1_ManualBuild(object sender, EventArgs e) { object[] columnValues = new object[1]; object[] rowValues = new object[1]; object[] cellValues = new object[1]; for (int i = 1; i <= 10; i++) { columnValues[0] = i; rowValues[0] = i; cellValues[0] = i; Matrix1.AddValue(columnValues, rowValues, cellValues); } columnValues[0] = 7; rowValues[0] = 3; cellValues[0] = 21; Matrix1.AddValue(columnValues, rowValues, cellValues); }