2015年9月28日 星期一

crystal report 動態產生文字標題欄位 TextObject

'準備一個報表樣本() : standard.rpt

        '載入報表樣本
        Dim crReport As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument
        Dim Path As String = Request.ServerVariables("APPL_PHYSICAL_PATH")
        crReport.Load(Path & "rpt\standard.rpt")
        Dim rasClientDocument As ClientDoc.ISCDReportClientDocument = crReport.ReportClientDocument
        '找到pagehead(頁首)區段
        Dim pageSection As CrystalDecisions.ReportAppServer.ReportDefModel.Section = rasClientDocument.ReportDefinition.PageHeaderArea.Sections(0)

        '在報表的pagehead(頁首)區段加入文字標題欄位 create TextObject
        Dim txtObject As CrystalDecisions.ReportAppServer.ReportDefModel.TextObject
        Dim txtObjectParagraph As ReportDefModel.Paragraph
        Dim txtObjectText As ReportDefModel.ParagraphTextElement

        '欄位的字型顏色定義
        Dim dFontColor As ReportDefModel.FontColor
        Dim dFont As ReportDefModel.Font
        dFont = New ReportDefModel.FontClass()
        dFont.Size = 11
        dFont.Name = "標楷體"
        dFontColor = New ReportDefModel.FontColorClass()
        dFontColor.Font = dFont

        txtObject = New CrystalDecisions.ReportAppServer.ReportDefModel.TextObject
        txtObject.Name = "text1"
        txtObject.Height = 285
        txtObject.Top = 1985
        txtObject.Left = begpx
        txtObject.Width = textbox1.Text.Trim.Length * 300  '變數 要加入的文字內容的寬度
        txtObject.Format.EnableCanGrow = True

        '處理Text objects中的文字內容
        txtObjectParagraph = New ReportDefModel.Paragraph
        txtObjectText = New ReportDefModel.ParagraphTextElement
        txtObjectText.Text = textbox1.Text.Trim '變數 要加入的文字內容
        txtObjectParagraph.ParagraphElements.Add(txtObjectText)
        txtObjectParagraph.FontColor = dFontColor
        txtObject.Paragraphs.Add(txtObjectParagraph)

        '加入Text objects
        rasClientDocument.ReportDefController.ReportObjectController.Add(txtObject, pageSection, 0)

2015年9月7日 星期一

ASP.NET DataTable 常用的操作

ASP.NET DataTable 常用的操作


Imports System.Data

        '以下程式順序無直接關連性

       '建立DataTable
        Dim dt As DataTable
        dt.Columns.Add("CODE")
        dt.Columns.Add("CODE_NAME")
        dt.Columns.Add("RATE", GetType(Double))
        dt.Columns.Add("TOT_AMT", GetType(System.Decimal))
        dt.TableName = "測試資料"

        '新增一筆資料
        Dim newRow As DataRow = dt.NewRow()
        newRow("CODE") = "A"
        newRow("CODE_NAME") = "促銷方案A"
        newRow("RATE") = 0.5
        newRow("TOT_AMT") = 3000
        dt.Rows.Add(newRow)

        '設定PrimaryKey
        dt.PrimaryKey = New DataColumn() {dt.Columns("CODE")}
        '尋找該代碼SOMECODE 所代表的名稱 ,若找不到會傳回Null 值
        Dim 代碼名稱 As String = dt.Rows.Find("SOMECODE").Item("CODE_NAME").ToString()


        '衍伸性欄位
        '新增一個欄位"分數"  將欄位"分數文字" (文字型態的欄位) 轉成數字型態
        Dim cola As DataColumn = New DataColumn("分數", GetType(System.Double))
        cola.Expression = "Convert(分數文字, 'System.Double')"
        dt.Columns.Add(cola)

        '新增一個欄位 "性别說明" 將欄位"性别"  轉換成中文說明
        Dim colb As DataColumn = New DataColumn("性别說明")
        colb.Expression = " iif(性别='F','女性','男性') "
        dt.Columns.Add(colb)

        '新增一個欄位 "付款年月" 將欄位"PAY_DATE" 轉換成年月
        Dim colc As DataColumn = New DataColumn("付款年月")
        colc.Expression = "  Substring(PAY_DATE,1,3) + Substring(PAY_DATE,5,2) "
        dt.Columns.Add(colc)


        '新增自動編號的欄位
        Dim dcID As DataColumn = New DataColumn("編號", GetType(System.Int32))
        dcID.AutoIncrement = True
        dcID.AutoIncrementSeed = 1
        dcID.AutoIncrementStep = 1
        dt.Columns.Add(dcID)


        'DataTable 逐列 變更內容或讀取內容
        For Each dr As DataRow In dt.Rows
            dr("AAA") = ""
            dr("CCC") = dr("AAA") + dr("BBB")
        Next


        'DataTable 尋找資料性别為F的資料 ,將結果用字串顯示
        Dim dr_Select As DataRow()
        dr_Select = dt.Select("性别='F'")
        Dim allname As String = ""
        For i As Integer = 0 To dr_Select.Length - 1
            allname += dr_Select(i).Item("名字") + ","
        Next
        allname = allname.TrimEnd(",")

        'DataTable aggregate functions
        '筆數統計 COUNT
        Dim totalrROW As Integer = dt.Compute("COUNT(1)", "CODE IN ('A','B') ")

        '金額小計 SUM
        Dim totalFee As Double = dt.Compute("SUM(TOT_AMT) + SUM(EXT_AMT) ", "CODE IN ('A','B') ")


        'DataTable distinct
        Dim columns As String() = {"COLUMN_A", "COLUMN_B"}
        Dim dtDist1 As DataTable = dt.DefaultView.ToTable(True, columns)
        '或
        Dim dtDist2 As DataTable = dt.DefaultView.ToTable(True, New String() {"COLUMN_A", "COLUMN_A"})


        'DataTable delete
        '將找到的資料逐筆刪除
        Dim xRows As DataRow()
        xRows = dt.Select("CODE IN ('A','B')")
        For Each item As DataRow In xRows
            dt.Rows.Remove(item)
        Next


        '將DataTable 使用指定的檔案 將目前的內容寫成 XML
        dt.WriteXml("C:\TEMP\" & dt.TableName & ".xml")

        '目前的資料結構撰寫成 XML 結構描述,寫入至指定的檔案。
        dt.WriteXmlSchema("C:\TEMP\dataset.xsd")