Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
2 / 2 / 1
Регистрация: 19.02.2016
Сообщений: 65

Вывести на печать содержимое DataGridView

19.09.2018, 18:10. Показов 6148. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ни разу не работал с этой функцией, да и в нете не много информации.
Буду рад любым подсказкам.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.09.2018, 18:10
Ответы с готовыми решениями:

Вывести на печать содержимое Picturebox
Всем привет! я новичек, прошу помочь! Не могу никак вывести на печать содержимое Picturebox Пожалуйста подскажите! Заранее...

Вывести на печать содержимое формы
как вывести на печать содержимое формы?

Вывести на принтер содержимое DataGridView
Дорого дня специалисты программирования. создаю базу данных на VB2010 и осталось мне там тока написать код для кнопкиПечать, то есть...

14
Лень — мое второе и
 Аватар для Orlangur
3224 / 2413 / 686
Регистрация: 28.11.2014
Сообщений: 3,599
Записей в блоге: 3
19.09.2018, 18:47
Лучший ответ Сообщение было отмечено scart как решение

Решение

scart, Печать таблицы из DataGridView с заголовком и комментариями
1
2 / 2 / 1
Регистрация: 19.02.2016
Сообщений: 65
22.09.2018, 11:27  [ТС]
Спасибо, буду посмотреть)
0
2 / 2 / 1
Регистрация: 19.02.2016
Сообщений: 65
23.09.2018, 18:42  [ТС]
В общем маленько не то.
Смог сделать следующее

VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Dim height As Integer = DataGridView1.Height
        DataGridView1.Height = DataGridView1.RowCount * DataGridView1.RowTemplate.Height
        bitmap = New Bitmap(Me.DataGridView1.Width, Me.DataGridView1.Height)
        DataGridView1.DrawToBitmap(bitmap, New Rectangle(0, 0, Me.DataGridView1.Width, Me.DataGridView1.Height))
        PrintPreviewDialog1.Document = PrintDocument1
        PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
        PrintPreviewDialog1.ShowDialog()
        DataGridView1.Height = height
 
    End Sub
И

VB.NET Скопировано
1
2
3
4
5
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.DrawImage(bitmap, 0, 0)
        Dim rectPrint As RectangleF = e.PageSettings.PrintableArea
        If Me.DataGridView1.Height - rectPrint.Height > 0 Then e.HasMorePages = True
    End Sub
Получается почти то что мне нужно - лист представляет собой нужный датагрид но только не заполненый. Заполняю его на форме все ок информация выглядит как надо но на печать уходит пустой грид все равно. Как заполнить его данными?
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
23.09.2018, 22:03
scart, печатать картинку не лучшее решение. Качество довольно низкое.
В стиле ваших предложений.
Кликните здесь для просмотра всего текста
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim ww, hh As Integer
    With DataGridView1
        For i = 0 To nCols - 1
            ww += .Columns(i).Width
        Next
        ww += .RowHeadersWidth + 2
        For i = 0 To nRows - 1
            hh += .Rows(i).Height
        Next
        hh += .ColumnHeadersHeight + 2
        .ClearSelection()
    End With
    Dim rc As New Rectangle(New Point(0, 0), New Size(ww, hh))
    Bitmap = New Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    DataGridView1.DrawToBitmap(Bitmap, rc) 'на картинке будет отображаться только то, что видно на экране
    PrintPreviewDialog1.Document = PrintDocument1
    PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
    PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    Dim x As Integer = 50, y As Integer = 20
    e.Graphics.DrawImage(Bitmap, x, y)
    'Картинка, судя по всему, будет умещаться на один лист. (e.HasMorePages = False)
End Sub
Миниатюры
Вывести на печать содержимое DataGridView   Вывести на печать содержимое DataGridView  
0
2 / 2 / 1
Регистрация: 19.02.2016
Сообщений: 65
24.09.2018, 13:16  [ТС]
Как я понимаю сложность в том чтоб правильно область "отрисовки" задать?
С вашим вариантом получается так:
Миниатюры
Вывести на печать содержимое DataGridView  
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.09.2018, 13:41
scart, если вы выложите проект, то можно и оценить ваши эксперименты.
0
2 / 2 / 1
Регистрация: 19.02.2016
Сообщений: 65
24.09.2018, 14:13  [ТС]
Да конечно.
Форма 4. Суть вопроса - дататаймпикером и комбобоксом задаем что отбразить. кнопкой распечатать - вывести все это на печать.
Вложения
Тип файла: zip WindowsApplication1.zip (162.3 Кб, 59 просмотров)
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.09.2018, 15:31
Лучший ответ Сообщение было отмечено scart как решение

Решение

Посмотрел проект, но у вас там все слишком накручено, так что вникать не стал. Т.к. речь шла только о печати, то удалил все формы кроме четвертой и сделал ее стартовой. Для заполнения сетки вместо таблицы использовал процедуру моделирования данных (это ничего не меняет). Исправил: после описания nCols и nRows их нужно определить.
Результат на картинке.
Кликните здесь для просмотра всего текста
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Public Class Form4
    Private bitmap As Bitmap
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ww, hh As Integer
        Dim nCols, nRows As Integer 'их же нужно как-то определить!
        nCols = DataGridView1.ColumnCount '!!!
        nRows = DataGridView1.RowCount '!!!
        With DataGridView1
            For i = 0 To nCols - 1
                ww += .Columns(i).Width
            Next
            ww += .RowHeadersWidth + 2
            For i = 0 To nRows - 1
                hh += .Rows(i).Height
            Next
            hh += .ColumnHeadersHeight + 2
            .ClearSelection()
        End With
        Dim rc As New Rectangle(New Point(0, 0), New Size(ww, hh))
        bitmap = New Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        DataGridView1.DrawToBitmap(bitmap, rc) 'на картинке будет отображаться только то, что видно на экране
        PrintPreviewDialog1.Document = PrintDocument1
        PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
        PrintPreviewDialog1.ShowDialog()
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        setDGV(5, 10)
    End Sub
 
    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
 
    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim x As Integer = 50, y As Integer = 20
        e.Graphics.DrawImage(bitmap, x, y)
    End Sub
 
    Private Sub setDGV(ByVal nc As Integer, ByVal nr As Integer)
        If nc < 3 Then Exit Sub
        With DataGridView1
            .AllowUserToAddRows = False
            .ColumnCount = nc
            .RowCount = nr
            Dim cnt() As String = {"Франция", "Россия", "Германия", "Финляндия", "Китай"}
            Dim rnd As New Random
            For j = 0 To nc - 1
                .Columns(j).HeaderText = "Column " & (j + 1).ToString
            Next
            For i = 0 To nr - 1
                .Rows(i).Cells(0).Value = i + 1
                .Rows(i).Cells(1).Value = rnd.Next(10000, 100000)
                .Rows(i).Cells(2).Value = cnt(rnd.Next(0, cnt.Length))
                If nc > 3 Then
                    For j = 3 To nc - 1
                        .Rows(i).Cells(j).Value = cnt(rnd.Next(0, cnt.Length)) & rnd.Next(1, 100).ToString
                    Next
                End If
            Next
            .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        End With
    End Sub
End Class

Могу сказать, что дело совсем не в процедуре печати, а в вашем проекте в целом.
Непонятно по какой причине не подошел код по первой ссылке.
Кроме непосредственной печати возможен вариант с ReportViewer (Microsoft.Reporting.WinForms).
Миниатюры
Вывести на печать содержимое DataGridView  
1
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 197
11.02.2020, 16:56
ovva, А подскажите пожалуйста, как сделать то же самое, только если в dvg не помещаются данные (см скрин1)
и на печать это выводиться Вашим кодом (который Вы указали выше) скрин2.

Как это все уместить на странице предварительного просмотра что бы был весь документ и вписать его в рамки страницы?
Миниатюры
Вывести на печать содержимое DataGridView   Вывести на печать содержимое DataGridView  
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
11.02.2020, 17:42
KwaZZi, рассмотрим задачку. У вас есть текстовый объект шириной А и есть контейнер, в который вы хотите поместить этот объект, шириной В. В<А. Что можно сделать?
1. Уменьшить А, например, за счет уменьшения размеров шрифта или (и) удаления незначимых слов.
2. Увеличить В за счет увеличения размера листа и изменения его ориентации.
1
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 197
11.02.2020, 19:07
ovva, так ориентация страницы итак альбомная, с полями я игрался.. убирал в ноля, все равно не помещается на лист.
Поэтому, буду рад, если вы мне поможете решить эту "задачку". Заранее Вам большое спасибо.
Только не знаю как это все будет выглядить. буду рад любому примеру, дабы я не знаю как. Очень много примеров перепробывал и ничего не помогает.
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
11.02.2020, 19:19
Измените размер шрифта не 10, а 8 или 7 (6)
Измените размер листа возьмите не А4, а А3
Цитата Сообщение от KwaZZi Посмотреть сообщение
Очень много примеров перепробывал
Например
0
4 / 4 / 0
Регистрация: 17.01.2020
Сообщений: 197
11.02.2020, 19:51
ovva, очень много с интернета, с этого форума, переводил даже с c# на vb.net.

Подскажите, как это сделать?
Цитата Сообщение от ovva Посмотреть сообщение
Измените размер шрифта не 10, а 8 или 7 (6)
Измените размер листа возьмите не А4, а А3
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
11.02.2020, 22:35
Перед обращением к PrintPreviewDialog вы можете вызвать PageSetupDialog и настроить размер листа, ориентацию и поля.
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
'…
Dim psd As New PageSetupDialog
psd.AllowMargins = True
psd.AllowOrientation = True
psd.AllowPaper = True
psd.AllowPrinter = True
psd.EnableMetric = True
psd.ShowNetwork = True
psd.Document = doc
Dim result As DialogResult = psd.ShowDialog()
If result = DialogResult.OK Then
'…
Есть вопрос: а все ли поля так нужны в отчетном документе? М.б. от каких-то можно безболезненно отказаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2020, 22:35
Помогаю со студенческими работами здесь

DataGridView По номеру строку вывести в сообщении содержимое ячеек
На форме datagridview с данными, кнопка и текстовое поле. в текстовое поле вводиться номер строки (индекс) и при нажатии после на кнопку...

Вывести содержимое формы на печать
Как распечатать окно ?

Как вывести на печать содержимое DBGrid?
Добрый день! Подскажите пожалуйста как вывести на печать содержимое DBGrid. Printer.Print DBGrid1.Text - печатает только первую ячейку...

Как вывести содержимое DataGrid на печать?
Подскажите пожалуйста как можно по нажатию кнопки вывести на печать то что в данный момент выводиться в DataGrid?

Как вывести на печать содержимое текстового поля?
Как вывести на печать содержимое текстового поля? Подскажите пож.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер