0

好吧,我正在尝试使用 SQL Server 中的存储过程创建一个向下钻取的 DevExpress 报告,但是每一行的钻取数据都是相同的,有人有解决方案吗?谢谢。

这是存储过程:

BEGIN
SELECT 
a.ID_Sl_Invoice AS [ID_Invoice],
b.Kode AS [Kode_Konsumen],
B.Nama AS [Nama_Konsumen],
A.Nomor AS [Nomor_INJ],
a.Tanggal AS [Tanggal_INJ],
e.Nomor AS [Nomor_SPJ],
a.Harga AS [Nilai_Penagihan],
f.Tanggal AS [Tanggal_SJ],
f.Nomor AS [Nomor_SJ]

FROM Sl_Invoice a 
JOIN Ms_Konsumen b ON A.ID_Ms_Konsumen = B.ID_Ms_Konsumen
JOIN Sl_Invoice_SuratJalan c ON A.ID_Sl_Invoice = C.ID_Sl_Invoice
JOIN Sl_Invoice_SuratPesanan d ON a.ID_Sl_Invoice = d.ID_Sl_Invoice
JOIN Sl_SuratPesanan e ON d.ID_Sl_SuratPesanan = e.ID_Sl_SuratPesanan
JOIN Sl_SuratJalan f ON f.ID_Sl_SuratJalan = c.ID_Sl_SuratJalan 
WHERE 
a.Tanggal >=@tanggalAwal 
AND a.Tanggal <= @tanggalAkhir

END

这是我在报告中的代码

    const string sShowDetail = "Show Detail";
    const string sHideDetail = "Hide Detail";
    public RepInvoicePenj()
    {
        InitializeComponent();
    }

    ArrayList expandedValues = new ArrayList();

    bool ShouldShowDetail(int idInvoice)
    {
        return expandedValues.Contains(idInvoice);
    }

    private void DetailReport_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    {            
        e.Cancel = !ShouldShowDetail((int)GetCurrentColumnValue("ID_Invoice"));
    }

    private void xrTableCell6_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    {
        XRLabel label = (XRLabel)sender;
        if (ShouldShowDetail((int)label.Tag))
        {
            label.Text = sHideDetail;
        }
        else
        {
            label.Text = sShowDetail;
        }
    }

    private void xrTableCell6_PreviewClick(object sender, PreviewMouseEventArgs e)
    {

        int index = (int)e.Brick.Value;

        bool showDetail = ShouldShowDetail(index);

        if (showDetail)
        {
            expandedValues.Remove(index);
        }
        else
        {
            expandedValues.Add(index);
        }

        ViewControl viewcontrol = e.PreviewControl as ViewControl;
        FieldInfo fieldInfo = viewcontrol.GetType().GetField("pc", BindingFlags.NonPublic | BindingFlags.Instance);
        PrintControl printControl = (PrintControl)fieldInfo.GetValue(viewcontrol);
        Page page = printControl.SelectedPage;

        CreateDocument();

        printControl.SelectedPageIndex = page.Index;  //change SelectedPageIndex instead of calling the ShowBrick method.

    }

    private void xrTableCell6_PreviewMouseMove(object sender, PreviewMouseEventArgs e)
    {
        Cursor.Current = Cursors.Hand;
    }

    private void RepInvoicePenj_DataSourceDemanded(object sender, EventArgs e)
    {
          this.sP_InvoicePenjualanTableAdapter1.Fill(repSalesInvoiceDataSet1.SP_InvoicePenjualan,
            Convert.ToDateTime(this.tanggalAwalParam.Value), Convert.ToDateTime(this.tanggalAkhirParam.Value));
    }

结果就像

Row 1 = A
Drilled-down data 1 = A , B , C

Row 2 = B
Drilled-down data 2 = A , B , C

Row 3 = C
Drilled-down data 3 = A , B , C

我需要做出类似的结果

Row 1 = A
Drilled-down data = A

Row 2 = B
Drilled-down data = B

Row 3 = C
Drilled-down data = C

谢谢

4

0 回答 0