none
CrystalReport顯示的問題 RRS feed

  • 問題

  • 我目前碰到一個問題
    圖1是我現在報表顯示的樣子
    圖1:http://0rz.tw/XsjHn

    問題點在於
    那三個檢查項目的結果顯示有錯誤
    第一二筆的結果都被第三筆的結果給蓋掉

    如果只有顯示一筆資料的話是沒有問題的
    圖2:http://0rz.tw/ifWvS

    我報表的設計是這樣
    圖3:http://0rz.tw/RFlvF

    每個日期下的檢查結果,我是用程式來產生的,
    我知道我這樣寫會造成只要檢查項目在兩筆以上後,
    所有的結果都會被最後一筆的結果給蓋掉,
    (我想是因為在報表設計那邊檢查結果的六格object都是文字物件(物件名稱是result0~6),
    所以只要第二筆之後的結果產生出來第一筆就會被第二筆給蓋過,因為他們的物件都叫做result0~6.... )
    我不知道該怎麼解決,
    想請問是否可以在表單設計那邊來解決?還是要做程式上的修正?
    煩請高手指點了,謝謝。

    程式碼是這樣

        Private Sub fill()
            Dim result As TextObject = Nothing
            conn.Close()
            Dim i00 As String = getValue("id", "i00_caption", "name", cb_caption.Text)
            Dim text As TextObject = Nothing
            Dim s As Date = DateTimePicker1.Text
            For i As Integer = 0 To DataGridView1.Rows.Count - 1 ' 檢查項目的個數
                For x As Integer = 0 To 6 ' 一週天數
                    If s.DayOfWeek <> DayOfWeek.Sunday Then
                        Text = TryCast(Rdt.ReportDefinition.ReportObjects("date" + x.ToString), TextObject) ' 報表上的日期(除了星期日之外)
                        Text.Text = s.AddDays(x - CInt(s.DayOfWeek) + 1).ToString("MM/dd")
                        date_str = s.AddDays(x - CInt(s.DayOfWeek) + 1).ToString("yyyy/M/d")
                    Else
                        Text = TryCast(Rdt.ReportDefinition.ReportObjects("date" + x.ToString), TextObject)
                        Text.Text = s.AddDays(x - CInt(s.DayOfWeek) - 6).ToString("MM/dd")
                        date_str = s.AddDays(x - CInt(s.DayOfWeek) - 6).ToString("yyyy/M/d")
                    End If

                    rpt_item = DataGridView1.Rows(i).Cells("檢查項目").Value.ToString
                    result_cmd = "SELECT Min(iniResult) AS Result FROM query2 WHERE i00_caption.id=" + i00 + " AND i01_item.name = '" + rpt_item + "'  GROUP BY query2.i00_caption.id, query2.i01_item.name, query2.iniDate HAVING iniDate=#" + date_str + "#"
                    result = TryCast(Rdt.ReportDefinition.ReportObjects("result" + x.ToString), TextObject)
                    Dim ds As New DataSet()
                    Dim da As New OleDbDataAdapter(result_cmd, conn)
                    conn.Open()
                    da.Fill(ds, "query2")
                    If ds.Tables(0).Rows.Count > 0 Then
                        result.Text = ds.Tables(0).Rows(0)("Result").ToString()
                    Else
                        result.Text = "無資料"
                    End If
                    conn.Close()
                Next
            Next
        End Sub

    • 已移動 璉璉Moderator 2009年10月3日 上午 03:36 (從:Visual Basic)
    2009年4月30日 上午 07:13

解答

所有回覆