UCP_2005 Ответов: 0

Отчет 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 "определение" различаются детали. Ни один из кодов, которые вы показываете, не имеет никакой пользы.

0 Ответов