Как отобразить несколько этикеток, используя информацию из таблицы данных для печати?

Я пытаюсь сделать программу печати этикеток на c #, используя форму Windows. Я не могу использовать базу данных для этого проекта, поэтому вместо этого я использовал Excel в качестве базы данных. Я использовал oledb, чтобы импортировать файл Excel в datagridview и событие cellclick, чтобы заполнить необходимое текстовое поле, отображающее метки на панели для дизайна меток. Это прекрасно работает с момента печати страницы, но мне интересно, есть ли способ напечатать выбранный диапазон одновременно, вместо того, чтобы щелкнуть одну ячейку, чтобы отобразить одну этикетку, а затем перейти и перейти к печати другой. это мой текущий код.

OleDbConnection con;

            private void dataGridView1_RowPostPaint_1(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                this.dataGridView1.Rows[e.RowIndex].Cells["column1"].Value = (e.RowIndex + 1).ToString();
            }

            private void btn_Browse_Click(object sender, EventArgs e)
            {
                //load file
                try
                {
                    OpenFileDialog openfile1 = new OpenFileDialog();
                    openfile1.Filter = "Excel Files|*.xls;*.xlsx";
                    if (openfile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        this.txt_File.Text = openfile1.FileName;
                        if (!string.IsNullOrEmpty(openfile1.FileName))
                        {
                            con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openfile1.FileName + ";Extended Properties=Excel 12.0;");
                            con.Open();
                            DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                            con.Close();

                            Combo_Sheet.Items.Clear();

                            for (int i = 0; i < dt.Rows.Count; i++)
                            {
                                String sheetName = dt.Rows[i]["TABLE_NAME"].ToString();
                                                           Combo_Sheet.Items.Add(sheetName);
                            }
                        }
                    }
                }
                catch
                {
                }
            }
  private void btn_SelectSheet_Click(object sender, EventArgs e)
        {  
                    try
                    {
                        OleDbDataAdapter oda = new OleDbDataAdapter("Select * from [" + Combo_Sheet.Text + "]", con);
                        DataTable dt = new DataTable();
                        oda.Fill(dt);
                        dataGridView1.DataSource = null;
                        dataGridView1.DataSource = dt;

                    }
                    catch
                    {
                    }
            }  



            private void btn_Print_Click(object sender, EventArgs e)
            {
                //show print dialog and print
                PrintDialog printDlg = new PrintDialog();
                if (printDlg.ShowDialog() == DialogResult.OK) printDocument1.Print();
                //printDocument1.Print();
            }


            private void printDocument1_PrintPage_1(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                //setup printing area
                string name = txt_Name.Text;
                string part = txt_Part.Text;
                string code = txt_Code.Text;
                string barCode = txt_Code.Text;
                if(txt_Code.Text != "")
                {
                    Zen.Barcode.Code128BarcodeDraw brCode = 
                    Zen.Barcode.BarcodeDrawFactory.Code128WithChecksum;
                    PictureBox pic = new PictureBox();
                    pic.Image = brCode.Draw(barCode, 40);
                    Image img = pic.Image;
                    e.Graphics.DrawString(name, new Font("Arial", 8, FontStyle.Italic | FontStyle.Bold), Brushes.Black, new Point(10, 10));
                    e.Graphics.DrawString(part, new Font("Arial", 8, FontStyle.Bold), Brushes.Black, new Point(10, 25));
                    e.Graphics.DrawImage(img, new Rectangle(12, 45, 100, 15));
                    e.Graphics.DrawString(code, new Font("Arial", 6, FontStyle.Bold), Brushes.Black, new Point(10, 60));
        }
        else
        {
                    e.Graphics.DrawString(name, new Font("Arial", 8, FontStyle.Italic | FontStyle.Bold), Brushes.Black, new Point(10, 10));
                    e.Graphics.DrawString(part, new Font("Arial", 8, FontStyle.Bold), Brushes.Black, new Point(10, 25));
                    e.Graphics.DrawString(code, new Font("Arial", 6, FontStyle.Bold), Brushes.Black, new Point(10, 60));
        }

}

Итак, мой текущий код выглядит следующим образом. excel -> datagridview -> текстовые поля -> метки (на панели1) и распечатайте все, что есть на панели1. Как сделать так, чтобы можно было выбрать несколько строк, распечатать несколько этикеток кнопкой печати только один раз? Я был на этом некоторое время, но не могу понять это. : (

0
задан user11666603 1 July 2019 в 18:58
поделиться