Naqash Younis Ответов: 2

Помогите в этом VB.NET в разделе печать


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

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

Я не знаю как это сделать я много искал в google но потерпел неудачу

2 Ответов

Рейтинг:
0

OriginalGriff

Начните с чтения на Класс PrintDocument (System.Рисование.Печать) | Microsoft Docs[^] - это делает фактическую печать. То, что вы печатаете, зависит от вас - мы не можем быть конкретными, потому что вы не даете нам никаких подробностей, и у нас нет никакого доступа к вашим данным вообще!


Naqash Younis

это код который я использую для печати ваучера с одним сбором но мне нужен ваучер с несколькими сборами в один клик




ItemQillareport общественные функции() в качестве набора данных
Dim dsData как набор данных
Попробуй

'сайту dsdata = DalHelper.Методы executedataset(m_ConString, свойство commandtype.Текст, "выбрать * из PrintChallan где Reg_num='" &амп; StidentFee.TextBox14.Текст &ампер; "' и fee_Month='" &амп; StidentFee.Поле combobox1.Текст &ампер; "' и Fea_year='" &амп; StidentFee.TextBox4.Текст &ампер; "'")
сайту dsdata = DalHelper.ExecuteDataset(m_ConString, CommandType.Text, "SELECT dbo.PrintChallan.*, dbo.School_Info.* от dbo.PrintChallan CROSS JOIN dbo.School_Info, где PrintChallan.Reg_num='" & StidentFee.TextBox14.Text & "' и PrintChallan.fee_Month='" & StidentFee.ComboBox1.Text & "' и PrintChallan.Fea_year='" &амп; StidentFee.TextBox4.Текст &ампер; "' и School_Info.Id='1'")
Поймать ex как исключение
Ничего Не Возвращайте
Конец Попытки
Возврат dsData

Конечная Функция

Private Sub Employe_Led_report_Load(отправитель как система.Объект, как система.EventArgs) Обрабатывает MyBase.Load


ReportViewer1.LocalReport.ReportEmbeddedResource = "KTC.Report36.rdlc"
Дим rdsNumberofReferrals как новый Microsoft.Отчетности.Приложения WinForms.ReportDataSource()

rdsNumberofReferrals.Имя = "Имя Dataset1"
Дим dsBrands как набор данных = itemQillareport()
rdsNumberofReferrals.Значение = dsBrands.Таблицы(0)
ReportViewer1.LocalReport.Источники Данных.Добавить(rdsNumberofReferrals)
ReportViewer1.Обновление()
Затемните newPageSettings как новую систему.Рисование.Печатание.Свойство pagesettings
newPageSettings.Размер Бумаги = Новая Печать.Формат Бумаги("Custom", 820, 1150)

newPageSettings.Пейзаж = Истина
newPageSettings.Маржа = Новая Система.Рисование.Печатание.Поля(10, 10, 10, 10)
ReportViewer1.SetPageSettings(newPageSettings)
Me.ReportViewer1.RefreshReport()



Конец Подводной Лодки

OriginalGriff

Во-первых ... прекратите то, что вы делаете, и срочно исправьте все свое приложение.
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Когда вы исправите это, вы можете начать думать об "улучшениях", но в данный момент все ваше приложение-это катастрофа, ожидающая своего часа...

Naqash Younis

спасибо, что сказал мне об этом.
не могли бы вы сказать мне, как я могу распечатать весь Каллахан из dbo?PrintChallan таблица dbo.PrintChallan store ежемесячные ваучеры базовой платы для многих студентов class wise я хочу распечатать все ваучеры платы в один клик я также упомянул свой исходный код.

OriginalGriff

Проблема, которую вы заметили, - это одно. Проблема, с которой вы столкнулись, гораздо серьезнее и опаснее. Когда вы исправите это, вы можете перейти к тому, что вы заметили - но это бессмысленно до этого!

Рейтинг:
0

Naqash Younis

<pre>
    Public Function itemQillareport() As DataSet
        Dim dsData As DataSet
        Try

            'dsData = DalHelper.ExecuteDataset(m_ConString, CommandType.Text, "select * from PrintChallan where Reg_num='" & StidentFee.TextBox14.Text & "' and fee_Month='" & StidentFee.ComboBox1.Text & "' and Fea_year='" & StidentFee.TextBox4.Text & "'")
            dsData = DalHelper.ExecuteDataset(m_ConString, CommandType.Text, "SELECT dbo.PrintChallan.*, dbo.School_Info.* FROM dbo.PrintChallan CROSS JOIN dbo.School_Info where PrintChallan.Reg_num='" & StidentFee.TextBox14.Text & "' and PrintChallan.fee_Month='" & StidentFee.ComboBox1.Text & "' and PrintChallan.Fea_year='" & StidentFee.TextBox4.Text & "' and School_Info.Id='1'")
        Catch ex As Exception
            Return Nothing
        End Try
        Return dsData

    End Function
    
    Private Sub Employe_Led_report_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       

        ReportViewer1.LocalReport.ReportEmbeddedResource = "KTC.Report36.rdlc"
            Dim rdsNumberofReferrals As New Microsoft.Reporting.WinForms.ReportDataSource()

            rdsNumberofReferrals.Name = "DataSet1"
            Dim dsBrands As DataSet = itemQillareport()
            rdsNumberofReferrals.Value = dsBrands.Tables(0)
            ReportViewer1.LocalReport.DataSources.Add(rdsNumberofReferrals)
            ReportViewer1.Update()
        Dim newPageSettings As New System.Drawing.Printing.PageSettings
        newPageSettings.PaperSize = New Printing.PaperSize("Custom", 820, 1150)

        newPageSettings.Landscape = True
        newPageSettings.Margins = New System.Drawing.Printing.Margins(10, 10, 10, 10)
        ReportViewer1.SetPageSettings(newPageSettings)
            Me.ReportViewer1.RefreshReport()



    End Sub


phil.o

Вам сказали, что способ, которым вы строите свои SQL-запросы с помощью конкатенации строк, очень опасен и, по сути, является плохая практика И все же ты продолжаешь это делать. Вы можете ожидать некоторых серьезных проблем, если вы не измените свои пути.