ashlytech Ответов: 1

Использование printdocument для печати диапазона страниц


у меня возникла проблема с выбором диапазона страниц или одной страницы для моей программы для печати выходных данных из моего приложения. Приложение печатает все страницы всякий раз, когда я хочу распечатать их из приложения.Приведенный ниже код работает хорошо но только печатает все страницы'
Спасибо

Что я уже пробовал:

Dim strConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=c:\Users\Public\COUNCILDATA.mdb;Jet OLEDB:Database Password=ibadanc1;"
       Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection(strConnection)
       cn.Open()
       Dim da As New OleDb.OleDbCommand("select * from DEPTNAME_DATA where DEPT_NAME='" & (dep_name) & "'", cn)
       Dim dr As OleDb.OleDbDataReader = da.ExecuteReader()
       If dr.HasRows Then
           dr.Close()
           cn.Close()
           Dim printDialog1 As PrintDialog = New PrintDialog
           PrintDocument1.DefaultPageSettings.PaperSize = PrintDocument1.PrinterSettings.PaperSizes(1)
           PrintPreviewDialog1.ShowDialog()
           Dim result As DialogResult = printDialog1.ShowDialog
           If (result = Windows.Forms.DialogResult.OK) Then
               PrintDocument1.Print()
           End If
       Else
           MsgBox("IT SEEMS THE DEPARTMENT'S NAME IS NOT CORRECT")
       End If

Richard Deeming

Dim da As New OleDb.OleDbCommand("select * from DEPTNAME_DATA where DEPT_NAME='" & (dep_name) & "'", cn)

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

1 Ответов

Рейтинг:
1

OriginalGriff

Если он печатает все страницы, это потому, что это то, что вы сказали ему сделать: Объект printdocument.Событие PrintPage (System.Рисование.Печать) | Microsoft Docs[^] вызывается повторно до тех пор, пока не установит PrintPageEventArgs.HasMorePages к false.

Система понятия не имеет, что вы делаете или не хотите печатать: она полагается на вас, чтобы решить это и установить HasMorePages в false, когда вы закончите.
Поэтому, если вы хотите печатать меньше информации, вам нужно изменить код обработчика событий PrintPage - который мы не видим - чтобы ограничить его "только теми страницами", которые вам нужны.

Извините, но мы не можем сделать это для вас!


ashlytech

когда PrintPageEventArgs.HasMorePages ложь, я буду видеть только на странице Мои данные выход в моем предварительного просмотра. вот что я использовал для vyew всех страниц в printpreview:
Если currow <= ds.Tables("ADMIN_SAL").Rows.Тогда Считай - 1
countd = 1
е.HasMorePages = Истина

Еще
e.HasMorePages = False
currow = 0
Конец, Если

OriginalGriff

:вздыхать:
Хотя HasMorePages-это правда, вы получите еще одно событие.
Вместо того чтобы просто установить его ложным на первой странице или делать то, что вы делаете в данный момент, и просто печатать все данные, ваша задача - печатать только те данные, которые вы хотите вывести, что означает заполнение страницы, проверку, есть ли еще что-то для печати и соответствующую настройку. Это означает, что если пользователю нужны только страницы 2 и 3, вам нужно "пропустить" данные для страницы 1 и остановиться, когда вы напечатали данные для страницы 3.
Система не считает страницы для вас: она понятия не имеет, что вы пытаетесь напечатать на каждой странице, пока не вызовет событие PrintPage и вы не запишете некоторые данные в графическом контексте.