Отчет Devexpress показывает только первую запись в разделе detailreport VB.NET & SQL server
В моей базе данных есть две таблицы: SalesInvoiceDetails и SalesInvoicesInventoryRowDetails.
У меня есть 6 x записей в моей таблице SalesInvoicesInventoryRowDetails, из которых Crystal Reports показывает только одну (первую запись).
Я проверил, поставив точки останова. Набор данных заполнен всеми данными, но он не появляется в Crystal Report, кроме первой записи (только одна строка).
Пожалуйста, нужна добрая помощь, чтобы решить эту проблему.
Спасибо.
Что я уже пробовал:
Dim row As DataRow = GridView1.GetDataRow(GridView1.FocusedRowHandle) Me.Cursor = Cursors.WaitCursor Dim objRpt As New XtraReport1 Dim ds As New SalesInvoiceDataSet Dim adp1 As New SqlClient.SqlDataAdapter("Select * From SalesInvoiceDetails Where InvoiceNo=N'" & row("InvoiceNo") & "'", DAL.OpenSqlConnection) adp1.Fill(ds, "SalesInvoiceDetails") Dim adp2 As New SqlClient.SqlDataAdapter("Select * From SalesInvoicesInventoryRowDetails Where InvoiceNo=N'" & row("InvoiceNo") & "' order by Sno", DAL.OpenSqlConnection) adp2.Fill(ds, "SalesInvoicesInventoryRowDetails") DAL.CloseConnection() objRpt.DataSource = ds Dim s As New SalesInvoicePrintForm s.DocumentViewer1.DocumentSource = objRpt s.Show()
Richard Deeming
Dim adp1 As New SqlClient.SqlDataAdapter("Select * From SalesInvoiceDetails Where InvoiceNo=N'" & row("InvoiceNo") & "'", DAL.OpenSqlConnection)
Не делай этого так!
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Dim adp1 As New SqlClient.SqlDataAdapter("Select * From SalesInvoiceDetails Where InvoiceNo=@InvoiceNo", DAL.OpenSqlConnection) adp1.SelectCommand.Parameters.AddWithValue("@InvoiceNo", row("InvoiceNo")) adp1.Fill(ds, "SalesInvoiceDetails") Dim adp2 As New SqlClient.SqlDataAdapter("Select * From SalesInvoicesInventoryRowDetails Where InvoiceNo=@InvoiceNo order by Sno", DAL.OpenSqlConnection) adp1.SelectCommand.Parameters.AddWithValue("@InvoiceNo", row("InvoiceNo")) adp2.Fill(ds, "SalesInvoicesInventoryRowDetails")
UCP_2005
Привет, Ричард, Спасибо, что ответил. Я изменил код, как вы и предлагали. Но все же он показывает только одну запись из таблицы SalesInvoicesInventoryRowDetails. Я думаю, что проблема где-то в отчете, так как набор данных заполняется необходимыми данными в отлаженном режиме.
Gerry Schmitz
В отчете CR "определение" различаются детали. Ни один из кодов, которые вы показываете, не имеет никакой пользы.