Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/75: Рейтинг темы: голосов - 75, средняя оценка - 4.77
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174

Вывод таблицы на печать

18.03.2016, 14:58. Показов 15963. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня в форме выведена таблица из Access, как сделать чтобы при нажатии на кнопку, эта таблица отправлялась на печать? Помогите пожалуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2016, 14:58
Ответы с готовыми решениями:

Вывод на печать документа
У меня такая просьба. Подскажите как или, кому не в лом, напишите код для вывода на печать документа Exel Заранее благодарю! Мне ну...

Вывод на печать DataGridView
Здравствуйте. Может кто-то сталкивался с проблемой вывода на печать DataGriedView. Поделитесь рабочим примером. Данные вывожу в...

Вывод на печать страницы richTextBox1
Проблема с печатью. Есть richTextBox1 на нем есть картинка pictureBox1 и 5 label, есть код, он не выводит на печать. Отображается тупо...

29
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
18.03.2016, 15:58
Лучший ответ Сообщение было отмечено AlexRasko как решение

Решение

C#
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
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            var dt = new DataTable();
            dt.Columns.Add("c1", typeof(int));
            dt.Columns.Add("c2", typeof(int));
            for (int i = 0; i < 5; i++)
                dt.Rows.Add(i, i);
 
            var dg = new DataGridView { Parent = this, Dock = DockStyle.Fill, DataSource = dt };
 
            this.Menu = new MainMenu();
            this.Menu.MenuItems.Add("Print", delegate
            {
                var pd = new PrintDocument();
                pd.PrintPage += (s, e) =>
                {
                    var bmp = new Bitmap(dg.Width, dg.Height);
                    dg.DrawToBitmap(bmp, dg.ClientRectangle);
                    e.Graphics.DrawImage(bmp, new Point(100, 100));
                };
                pd.Print();
            });
        }
    }
2
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
18.03.2016, 18:34  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
InitializeComponent();
var dt = new DataTable();
* * * * * * dt.Columns.Add("c1", typeof(int));
* * * * * * dt.Columns.Add("c2", typeof(int));
* * * * * * for (int i = 0; i < 5; i++)
* * * * * * * * dt.Rows.Add(i, i);
var dg = new DataGridView { Parent = this, Dock = DockStyle.Fill, DataSource = dt };
this.Menu = new MainMenu();
* * * * * * this.Menu.MenuItems.Add("Print", delegate
* * * * * * {
* * * * * * * * var pd = new PrintDocument();
* * * * * * * * pd.PrintPage += (s, e) =>
* * * * * * * * {
* * * * * * * * * * var bmp = new Bitmap(dg.Width, dg.Height);
* * * * * * * * * * dg.DrawToBitmap(bmp, dg.ClientRectangle);
* * * * * * * * * * e.Graphics.DrawImage(bmp, new Point(100, 100));
* * * * * * * * };
* * * * * * * * pd.Print();
* * * * * * });
Это мне этот код вставить в кнопку которая будет отправлять на печать?

Добавлено через 27 секунд
И не могли бы вы немного прокоментировать код, чтобы в нём разобраться
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
18.03.2016, 18:50
В этом коде описана форма. Создается на форме грид, туда заносятся данные, точнее привязываются, создается меню и кнопка принт, нажав на нее запускается делегат, в теле которого вы создаете документ printdocument и к его событию привязываете лямбду выражению, в котором мы создаем рисунок, полученный из датагрида и его распечатываем при вызове метода принт. Этот код, чтобы потестить вставляете в новую форму, точнее в ее конструктор и запускаете. Все увидите. Пишу с телефона, поэтому код неудобно комментировать
3
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
18.03.2016, 21:01  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
В этом коде описана форма. Создается на форме грид, туда заносятся данные, точнее привязываются, создается меню и кнопка принт, нажав на нее запускается делегат, в теле которого вы создаете документ printdocument и к его событию привязываете лямбду выражению, в котором мы создаем рисунок, полученный из датагрида и его распечатываем при вызове метода принт. Этот код, чтобы потестить вставляете в новую форму, точнее в ее конструктор и запускаете. Все увидите. Пишу с телефона, поэтому код неудобно комментировать
Спасибо большое
0
 Аватар для N1x0n
16 / 16 / 3
Регистрация: 14.04.2015
Сообщений: 155
Записей в блоге: 1
18.03.2016, 22:33
Интересно, попробую сделать.
0
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
20.03.2016, 23:11  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
В этом коде описана форма
Помогите пожалуйста ещё с этой ошибкой: Когда нажимаю "Печать", форма как-то меняется, появляется вверху кнопка "Print", а когда на неё нажимаю, пишет что идёт отправка на печать и потом выскакивает ошибка. Что делать?
Миниатюры
Вывод таблицы на печать   Вывод таблицы на печать   Вывод таблицы на печать  

0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
20.03.2016, 23:19
AlexRasko, скиньте проект. Посмотрю.
1
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
21.03.2016, 11:11  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
скиньте проект. Посмотрю.
Вот:
https://drive.google.com/file/... sp=sharing

кнопка "Ученик" и потом в ней кнопка "Список учеников".

И не могли бы вы ещё в кнопке "Учитель" посмотреть ошибку с добавлением, пишет несоответствие типов

Буду благодарен.
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
21.03.2016, 11:32
В форме 5 в методе обработчика кнопки "Печать" уберите весь код и вставьте этот:
C#
1
2
3
4
5
6
7
8
var pd = new PrintDocument();
            pd.PrintPage += (s, q) =>
            {
                var bmp = new Bitmap(dataGridView1.Width, dataGridView1.Height);
                dataGridView1.DrawToBitmap(bmp, dataGridView1.ClientRectangle);
                q.Graphics.DrawImage(bmp, new Point(100, 100));
            };
            pd.Print();
По второму вопросу попозже гляну - пока не могу
1
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
21.03.2016, 12:48  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
По второму вопросу попозже гляну - пока не могу
Спасибо, буду ждать

Добавлено через 47 минут
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
В форме 5 в методе обработчика кнопки "Печать" уберите весь код и вставьте этот:
Снова показывает ошибку "Сервер RPC недоступен", но зато стиль формы не меняется.
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
21.03.2016, 13:43
Лучший ответ Сообщение было отмечено AlexRasko как решение

Решение

По второму вопросу заменить кусок кода вставки на этот:
C#
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
OleDbParameter myparam = new OleDbParameter("@uch", OleDbType.Integer, 50);
            OleDbParameter myparam1 = new OleDbParameter("@pred", OleDbType.Integer, 50);
            OleDbParameter myparam2 = new OleDbParameter("@oc_1", OleDbType.Integer, 50);
            OleDbParameter myparam3 = new OleDbParameter("@oc_2", OleDbType.Integer, 50);
            OleDbParameter myparam4 = new OleDbParameter("@oc_3", OleDbType.Integer, 50);
            OleDbParameter myparam5 = new OleDbParameter("@oc_4", OleDbType.Integer, 50);
            OleDbParameter myparam6 = new OleDbParameter("@oc_5", OleDbType.Integer, 5);
            OleDbParameter myparam7 = new OleDbParameter("@oc_6", OleDbType.Integer, 50);
            OleDbParameter myparam8 = new OleDbParameter("@oc_7", OleDbType.Integer, 50);
            OleDbParameter myparam9 = new OleDbParameter("@oc_8", OleDbType.Integer, 50);
            OleDbParameter myparam10 = new OleDbParameter("@oc_9", OleDbType.Integer, 50);
            OleDbParameter myparam11 = new OleDbParameter("@oc_10", OleDbType.Integer, 50);
            OleDbParameter myparam12 = new OleDbParameter("@chet", OleDbType.Integer, 50);
            myparam.Value = comboBox3.SelectedValue;           
            myparam1.Value = comboBox4.SelectedValue;
            myparam2.Value = textBox7.Text;
            myparam3.Value = textBox8.Text;
            myparam4.Value = textBox9.Text;
            myparam5.Value = textBox10.Text;
            myparam6.Value = textBox11.Text;
            myparam7.Value = textBox12.Text;
            myparam8.Value = textBox13.Text;
            myparam9.Value = textBox14.Text;
            myparam10.Value = textBox15.Text;
            myparam11.Value = textBox16.Text;
            myparam12.Value = textBox17.Text;
Добавлено через 1 минуту
Цитата Сообщение от AlexRasko Посмотреть сообщение
Сервер RPC недоступен
Попробуйте добавить после pd.Print(); вот это:
pd.Dispose();
1
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
21.03.2016, 22:07  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Попробуйте добавить после pd.Print(); вот это:
pd.Dispose();
Всё равно
Миниатюры
Вывод таблицы на печать  
0
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
21.03.2016, 23:02  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
По второму вопросу заменить кусок кода вставки на этот:
Огромное спасибо, наконец то заработало. Ещё последний, но не столь важный вопрос. Когда я запускаю программу, в comboBox уже выбрано первое значение, как сделать чтобы comboBox был пустым и не приходилось его очищать каждый раз?

Добавлено через 49 минут
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
По второму вопросу заменить кусок кода вставки на этот
А вот ещё никак не могу понять как обойти ошибку, вообщем в таблице у меня в полях КодУченика и КодПредмета выводятся их коды и перекрываются (типа мастера подстановок) ФИО и названием предмета. Когда я сделал поиск через comboBox, подключил к нему БД, сделал тоже вроде мастера подстановок ( тоесть выводит ФИО, но спрятан КодУченика), и когда начинаю искать, пишет: " 'Какое-то_ФИО' не найдено в КодУченика". Когда ищу по коду, то всё нормально. Это не столь значительная ошибка, но всё же пользователю было бы проще искать по ФИО чем по коду. Если сможете, можете подсказать решение проблемы?
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
21.03.2016, 23:50
1.Сервер RPC не доступен:
Процесс печати в программе запущенной из папок release/debug - тут советуют обновить драйвера на принтер. У вас вообще печатает/обрывается/не печатает?
2.
Цитата Сообщение от AlexRasko Посмотреть сообщение
Когда я запускаю программу, в comboBox уже выбрано первое значение
в конструкторе формы(где ваш comboBox) после функции InitializeComponent напишите: comboBox.SelectedIndex=-1; Таким образом у вас не будет выбран элемент
3.
Цитата Сообщение от AlexRasko Посмотреть сообщение
Это не столь значительная ошибка, но всё же пользователю было бы проще искать по ФИО чем по коду. Если сможете, можете подсказать решение проблемы?
По конкретнее, на какой форме и в каком месте ошибка возникает
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
22.03.2016, 04:53
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
в конструкторе формы(где ваш comboBox) после функции InitializeComponent напишите: comboBox.SelectedIndex=-1; Таким образом у вас не будет выбран элемент
Я уже отвечал недавно на этот вопрос. Правильный ответ: "Никак".
Цитата Сообщение от MSDN
Невозможно задать SelectedIndex из ComboBox элемент в значение -1, если элемент является элементом с привязкой к данным (You cannot set the SelectedIndex of a ComboBox item to -1 if the item is a data-bound item)
0
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
22.03.2016, 20:29  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Сервер RPC не доступен
А можно ещё как то сделать чтобы когда я нажимал на кнопку "Печать", появлялась форма, где выведена картинка которая отправляется на печать, и потом уже нажимать кнопку "Отправить на печать", ну тоесть чтобы можно было посмотреть что я отправляю
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
По конкретнее, на какой форме и в каком месте ошибка возникает
Там где форма "Учитель", и там где сделан у меня поиск, выдаёт несоотношение типов полей, когда ищу по фамилии а не по коду ученика

Добавлено через 49 секунд
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
в конструкторе формы(где ваш comboBox) после функции InitializeComponent напишите: comboBox.SelectedIndex=-1; Таким образом у вас не будет выбран элемент
Это в свойствах или где-то отдельно?
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 21:06
Лучший ответ Сообщение было отмечено AlexRasko как решение

Решение

Цитата Сообщение от AlexRasko Посмотреть сообщение
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
в конструкторе формы(где ваш comboBox) после функции InitializeComponent напишите: comboBox.SelectedIndex=-1; Таким образом у вас не будет выбран элемент
Это в свойствах или где-то отдельно?
kodv прав. Не получиться задать индекс -1, если сделана привязка к данным

Добавлено через 11 минут
Цитата Сообщение от AlexRasko Посмотреть сообщение
Там где форма "Учитель", и там где сделан у меня поиск, выдаёт несоотношение типов полей, когда ищу по фамилии а не по коду ученика
Замените обработчик кнопки на:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button6_Click(object sender, EventArgs e)
        {           
            if ((comboBox1.Text != "")&&(comboBox2.Text != ""))
            {
                OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\BD.mdb");
                OleDbCommand com = new OleDbCommand();
                OleDbCommand comm = new OleDbCommand();
                OleDbDataAdapter adap = new OleDbDataAdapter();
                DataSet ds = new DataSet();
                DataTable dt = new DataTable();
                com.Connection = conn;                
                com.CommandText = "Select * from [Оценки] WHERE КодУченика =@param1 AND КодПредмета=@param2";
                com.Parameters.AddWithValue("@param1", comboBox1.SelectedValue);
                com.Parameters.AddWithValue("@param2", comboBox2.SelectedValue);
                conn.Open();
                //int Okl = Convert.ToInt32(this.comboBox1.Text);
                adap.SelectCommand = com;
                adap.Fill(ds);
                dt = ds.Tables[0];
                dataGridView1.DataSource = dt;
                conn.Close();
            }            
        }
Добавлено через 22 минуты
Цитата Сообщение от AlexRasko Посмотреть сообщение
А можно ещё как то сделать чтобы когда я нажимал на кнопку "Печать", появлялась форма, где выведена картинка которая отправляется на печать, и потом уже нажимать кнопку "Отправить на печать", ну тоесть чтобы можно было посмотреть что я отправляю
Создайте новую форму - она у вас должна быть Form10. Добавьте на нее 3 кнопки:
1. Увеличить масштаб
2. Уменьшить масштаб
3. Печать

Затем добавьте элемент PrintPreviewControl - он у вас будет называться printPreviewControl1

Затем в обработчик кнопки увеличить масштаб ставите код:
C#
1
printPreviewControl1.Zoom *= 1.5;
в обработчик кнопки уменьшить масштаб ставите код:
C#
1
printPreviewControl1.Zoom /= 1.5;
в обработчик кнопки печать ставьте:
C#
1
pd.Print();
Конструктор должен выглядеть так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public Form10(DataGridView dg)
        {
            InitializeComponent();
 
            dg1 = dg;
 
            pd = new PrintDocument();
 
            pd.PrintPage += (s, q) =>
            {
                var bmp = new Bitmap(dg1.Width, dg1.Height);
                dg1.DrawToBitmap(bmp, dg1.ClientRectangle);
                q.Graphics.DrawImage(bmp, new Point(100, 100));
            };
 
            printPreviewControl1.Document = pd;
        }
Итого файл Form10.cs должен выглядеть так:

C#
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
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
 
namespace BD_School
{
    public partial class Form10 : Form
    {
        DataGridView dg1;
        PrintDocument pd;
        public Form10(DataGridView dg)
        {
            InitializeComponent();
 
            dg1 = dg;
 
            pd = new PrintDocument();
 
            pd.PrintPage += (s, q) =>
            {
                var bmp = new Bitmap(dg1.Width, dg1.Height);
                dg1.DrawToBitmap(bmp, dg1.ClientRectangle);
                q.Graphics.DrawImage(bmp, new Point(100, 100));
            };
 
            printPreviewControl1.Document = pd;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            printPreviewControl1.Zoom *= 1.5;
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            printPreviewControl1.Zoom /= 1.5;
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            pd.Print();
        }
    }
}
В Форме 5 на нажатие кнопки печать оставляете только :

C#
1
2
            Form10 frm10 = new Form10(dataGridView1);            
            frm10.ShowDialog();
1
1 / 1 / 2
Регистрация: 10.06.2014
Сообщений: 174
22.03.2016, 22:42  [ТС]
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Замените обработчик кнопки на:
Кого не выбирал бы и какой предмет, в любом случае выдаёт только одного ученика с ид 6

Добавлено через 7 минут
Цитата Сообщение от SailarmoonKS Посмотреть сообщение
Создайте новую форму - она у вас должна быть Form10. Добавьте на нее 3 кнопки:
1. Увеличить масштаб
2. Уменьшить масштаб
3. Печать
Затем добавьте элемент PrintPreviewControl - он у вас будет называться printPreviewControl1
Это всё работает, огромное спасибо вам за помощь
0
94 / 94 / 36
Регистрация: 01.10.2014
Сообщений: 229
22.03.2016, 22:45
Цитата Сообщение от AlexRasko Посмотреть сообщение
Кого не выбирал бы и какой предмет, в любом случае выдаёт только одного ученика с ид 6
Если вам надо сделать поиск 'или', то поставьте в SQL выражении вместо AND -> OR
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.03.2016, 22:45
Помогаю со студенческими работами здесь

Вывод на печать данные из DataGridView
Всем привет. Ребят, как вывести на печать данные из DataGridView ?

Вывод таблицы на печать
Здравствуйте. Как вывести на печать ровную таблицу, если при выводе значения могут иметь знак как плюс так и минус. Вот строка вывода на...

Вывод таблицы на печать
Помогите вывести на печать таблицу(ы) из базы данных Access, но чтобы на печати она выглядела как таблица.(С++Builder)

Вывод таблицы на печать Delphi
Ребят, пробовал сделать вывод на печать через Rave report, но не получается, выскакивает ошибка при том что в проекте ошибок нет и все...

Вывод таблицы со страницы на печать
Всем привет. Нужна помощь, нужно вывести таблицу со страницы сайта в вордовский документ так, чтобы на первой странице ворд док-та была...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru