Я создаю отчет, используя RDL C и Visual Basi c. Я использовал 2 таблицы данных для отображения информации в отчете, один для основного отчета ( DTT ) и еще один для подотчета ( TTT ). У меня есть 2 набора данных в RDL C, которые TFDataset и TSDataset . Мой отчет состоит из 1 производственного заказа ( PO ) в качестве первичного ключа с несколькими задачами в базе данных. В форме я создал Datagridview ( DGW ) для отображения данных из базы данных с флажками и ReportViewer для отображения отчета. Система потоков, DGW показывает список PO, поэтому пользователь может установить несколько флажков в DGW и распечатать выбранные PO в отчете. Выбранное ПО используется для извлечения задачи с помощью SQL и заполнения таблиц данных. PO хранятся в DTT, а задача хранится в TTT. Я использовал FOR EACH l oop для запуска SQL для каждого значения флажка. DTT, используемый для основного отчета, отображает несколько PO правильно с правильным разрывом страницы, но TTT, кажется, отображает список суммированных задач из другого PO, потому что l oop только что добавил задачу в одну и ту же таблицу данных для каждого l oop. Следовательно, проблема заключается в том, как разделить задачу по собственному заказу?
Private Sub GenerateReport()
For Each row As DataGridViewRow In DataGridView1.Rows
Dim isSelected As Boolean = Convert.ToBoolean(row.Cells("checkbox").Value)
If isSelected Then
Dim opt As QrCodeEncodingOptions = New QrCodeEncodingOptions
opt.DisableECI = True
opt.CharacterSet = "UTF-8"
opt.Width = 250
opt.Height = 250
Dim writer As New BarcodeWriter()
writer.Format = BarcodeFormat.QR_CODE
writer.Options = opt
Dim qr = New BarcodeWriter()
qr.Options = opt
qr.Format = BarcodeFormat.QR_CODE
Dim Result = New Bitmap(qr.Write(imdata.Rows(row.Index)(1).ToString))
Dim stream As New IO.MemoryStream
Result.Save(stream, Imaging.ImageFormat.Bmp)
connect.Open()
Dim insert As New SqlCommand("update POTB set t_qrcd = @t_qrcd, t_pfno = @t_pfno, t_dtpr = @t_dtpr where t_pdno = '" + imdata.Rows(row.Index)(0).ToString + "'", connect)
insert.Parameters.Clear()
insert.Parameters.Add("@t_pfno", SqlDbType.NVarChar).Value = Upf
insert.Parameters.Add("@t_qrcd", SqlDbType.Image).Value = stream.ToArray()
insert.Parameters.Add("@t_dtpr", SqlDbType.DateTime).Value = Date.Now
insert.ExecuteNonQuery()
Dim command As New SqlCommand("select t_pdno, t_item , t_dsca, t_qrdr, FORMAT(t_rdld,'dd/MM/yyyy') as t_rdld, t_opro, t_mark, t_qrcd, t_repr, t_pfno, FORMAT(t_dtpr,'dd/MM/yyyy hh:mm:ss tt') as t_dtpr FROM POTB
where t_pdno = '" + imdata.Rows(row.Index)(1).ToString + "'", connect)
Dim adapter As New SqlDataAdapter(command)
adapter.Fill(DTT)
Dim rds As New ReportDataSource("TFDataSet", DTT)
Dim task As New SqlCommand(" select ttirou1022201.t_tano, ttirou0032201.t_dsca, ttirou1022201.t_opno from ttisfc0012201
join ttcibd0012201 on ttcibd0012201.t_item = ttisfc0012201.t_mitm
join ttirou1022201 on ttirou1022201.t_mitm = ttisfc0012201.t_mitm and ttirou1022201.t_opro = ttisfc0012201.t_opro
join ttirou0032201 on ttirou0032201.t_tano = ttirou1022201.t_tano
where ttisfc0012201.t_pdno = '" + imdata.Rows(row.Index)(1).ToString + "' and ttisfc0012201.t_mitm = '" + imdata.Rows(row.Index)(2).ToString + "'
order by ttirou1022201.t_opno asc", connect)
Dim taskap As New SqlDataAdapter(task)
taskap.Fill(TTT)
ReportViewer1.LocalReport.DataSources.Add(rds)
connect.Close()
End If
Next
list.Add(TTT)
AddHandler ReportViewer1.LocalReport.SubreportProcessing, AddressOf SetSubDataSource
ReportViewer1.RefreshReport()
End Sub
введите описание изображения здесь