2014-02-20 1 views
1

Я хочу скрыть столбец на странице печати.Скрыть указанный столбец на странице печати C#

Вот изображение, которое показывает ID столбец остается видимым:

enter image description here

Я хочу, чтобы скрыть ID колонку.

Вот код, который я использую, я уже объявил this.dataGridView.Columns["ID"].Visible = false, но столбец ID по-прежнему отображается.

private void PrintPreview(object sender, EventArgs e) 
     { 
      PrintPreviewDialog _PrintPreview = new PrintPreviewDialog(); 
      printDocument1.DefaultPageSettings.Landscape = true; 
      _PrintPreview.Document = printDocument1; 
      ((Form)_PrintPreview).WindowState = FormWindowState.Maximized; 
      _PrintPreview.ShowDialog(); 

      this.dataGridView1.Columns["ID"].Visible = false; 
     } 

private void printDocument1_BeginPrint(object sender, PrintEventArgs e) 
     { 
      try 
      { 
       strFormat = new StringFormat(); 
       strFormat.Alignment = StringAlignment.Center; 
       strFormat.LineAlignment = StringAlignment.Center; 
       strFormat.Trimming = StringTrimming.EllipsisCharacter; 

       arrColumnLefts.Clear(); 
       arrColumnWidths.Clear(); 
       iCellHeight = 0; 
       iRow = 0; 
       bFirstPage = true; 
       bNewPage = true; 

       iTotalWidth = 0; 

       foreach (DataGridViewColumn dgvGridCol in dataGridView1.Columns) 
       { 
        iTotalWidth += dgvGridCol.Width; 
       } 
      } 

      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 

     private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
     { 
      try 
      { 
       //Set the left margin 
       int iLeftMargin = e.MarginBounds.Left; 

       //Set the top margin 
       int iTopMargin = e.MarginBounds.Top; 

       //Whether more pages have to print or not 
       bool bMorePagesToPrint = false; 

       int iTmpWidth = 0; 

       int width = 500; 

       int height = 90; 

       //For the first page to print set the cell width and header height 
       if (bFirstPage) 
       { 
        foreach (DataGridViewColumn GridCol in dataGridView1.Columns) 
        { 
         iTmpWidth = (int)(Math.Floor((double)((double)GridCol.Width/(double)iTotalWidth * (double)iTotalWidth * ((double)e.MarginBounds.Width/(double)iTotalWidth)))); 

         iHeaderHeight = (int)(e.Graphics.MeasureString(GridCol.HeaderText, GridCol.InheritedStyle.Font, iTmpWidth).Height) + 11; 

         // Save width and height of headres 
         arrColumnLefts.Add(iLeftMargin); 
         arrColumnWidths.Add(iTmpWidth); 
         iLeftMargin += iTmpWidth; 
        } 
       } 

       //Loop till all the grid rows not get printed 
       while (iRow <= dataGridView1.Rows.Count - 1) 
       { 
        DataGridViewRow GridRow = dataGridView1.Rows[iRow]; 

        //Set the cell height 
        iCellHeight = GridRow.Height + 5; 

        int iCount = 0; 

        //Check whether the current page settings allo more rows to print 
        if (iTopMargin + iCellHeight >= e.MarginBounds.Height + e.MarginBounds.Top) 
        { 
         bNewPage = true; 
         bFirstPage = false; 
         bMorePagesToPrint = true; 
         break; 
        } 

        else 
        { 
         if (bNewPage) 
         { 
          //Draw Header 
          e.Graphics.DrawString("Database Summary", new Font(dataGridView1.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString("Database Summary", new Font(dataGridView1.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13); 

          String strDate = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString(); 

          //Draw Date 
          e.Graphics.DrawString(strDate, new Font(dataGridView1.Font, FontStyle.Regular), Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(strDate, new Font(dataGridView1.Font, FontStyle.Regular), e.MarginBounds.Width).Width), e.MarginBounds.Top - e.Graphics.MeasureString("Database Summary", new Font(new Font(dataGridView1.Font, FontStyle.Regular), FontStyle.Regular), e.MarginBounds.Width).Height - 13); 

          //Draw Image 
          e.Graphics.DrawImage(pb1.Image, new Rectangle(300, 0, width, height)); 

          //Draw Columns  
          iTopMargin = e.MarginBounds.Top; 

          foreach (DataGridViewColumn GridCol in dataGridView1.Columns) 
          { 
           e.Graphics.FillRectangle(new SolidBrush(Color.Aqua), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

           e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

           e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font, new SolidBrush(GridCol.InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); 

           iCount++; 
          } 

          bNewPage = false; 
          iTopMargin += iHeaderHeight; 
         } 

         iCount = 0; 

         //Draw Columns Contents     
         foreach (DataGridViewCell Cel in GridRow.Cells) 
         { 
          if (Cel.Value != null) 
          { 
           e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font, new SolidBrush(Cel.InheritedStyle.ForeColor = System.Drawing.Color.Blue), new RectangleF((int)arrColumnLefts[iCount], (float)iTopMargin, (int)arrColumnWidths[iCount], (float)iCellHeight), strFormat); 
          } 

          //Drawing Cells Borders 
          e.Graphics.DrawRectangle(Pens.Red, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iCellHeight)); 

          iCount++; 
         } 
        } 

        iRow++; 
        iTopMargin += iCellHeight; 
       } 

       //If more lines exist, print another page. 
       if (bMorePagesToPrint) 
       { 
        e.HasMorePages = true; 
       } 

       else 
       { 
        e.HasMorePages = false; 
       } 
      } 

      catch (Exception exc) 
      { 
       MessageBox.Show(exc.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 

Любая помощь, как я могу это исправить?

Спасибо!

Ваш ответ будет очень признателен!

ответ

2

Я думаю, что проблема в printDocument1_PrintPage:

foreach (DataGridViewColumn GridCol in dataGridView1.Columns) 
{ 
    e.Graphics.FillRectangle(new SolidBrush(Color.Aqua), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

    e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

    e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font, new SolidBrush(GridCol.InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); 

    iCount++; 
} 

Вы зацикливание над ВСЕХ столбцов и печатью тиром значения. Поэтому вам следует пропустить столбец идентификатора. Имейте в виду, что изменение определенного столбца Visible собственности на false не скроет его из коллекции dataGridView1.Columns.

Во всяком случае, один простой способ для достижения этой цели:

foreach (DataGridViewColumn GridCol in dataGridView1.Columns) 
{ 
    if (GridCol.Name != "ID") 
    { 
     e.Graphics.FillRectangle(new SolidBrush(Color.Aqua), new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

     e.Graphics.DrawRectangle(Pens.Black, new Rectangle((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight)); 

     e.Graphics.DrawString(GridCol.HeaderText, GridCol.InheritedStyle.Font, new SolidBrush(GridCol.InheritedStyle.ForeColor), new RectangleF((int)arrColumnLefts[iCount], iTopMargin, (int)arrColumnWidths[iCount], iHeaderHeight), strFormat); 

     iCount++; 
    } 
} 
+0

Спасибо, сэр за ваш ответ. Но у меня есть еще одна проблема, идентификатор столбца ушел, но идентификационный номер все еще существует, как и этот образ: (я загружен в Dropbox): https://www.dropbox.com/s/gxagdwujkma3kb0/Capture.PNG Спасибо – Kaoru

+0

@Kaoru Сделайте то же самое для: 'foreach (DataGridViewCell Cel в GridRow.Cells)' вы должны отфильтровать ячейки, принадлежащие столбцу ID. (например, вы можете проверить «Cel.ColumnIndex»). Рассмотрим редизайн вашей логики. – etaiso

+0

Большое спасибо, сэр. Я рассмотрю редизайн моей логики этой страницы печати :) – Kaoru

1

Попробуйте поместить вашу строку this.dataGridView1.Columns ["ID"]. Visible = false; как первая строка вашего PrintPreview метод, потому что когда вы вызываете _PrintPreview.ShowDialog(); вызовет printDocument1_BeginPrint и, следовательно, этот столбец будет виден.

+0

Нет, он также не работает – Kaoru

+0

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

1

Как Mo.Ashfaq уже ответил, у вас есть логическая ошибка здесь

private void PrintPreview(object sender, EventArgs e) 
    { 
     ... 
     _PrintPreview.ShowDialog(); 

     this.dataGridView1.Columns["ID"].Visible = false; 
    } 

сделать это таким образом

private void PrintPreview(object sender, EventArgs e) 
    { 
     ... 
     this.dataGridView1.Columns["ID"].Visible = false; 
     _PrintPreview.ShowDialog(); 
     this.dataGridView1.Columns["ID"].Visible = true; // restore visibility 
    } 

следующая вещь - это то, что установочная колонка невидимая не мешает ее перечислить (как ответ Etaiso), заменить все вхождения

foreach (DataGridViewColumn dgvGridCol in dataGridView1.Columns) 
{ 
    ... 
} 

с

foreach (var column in dataGridView1.Columns) 
    if(column.Visible) 
    { 
     ... 
    } 
0

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

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

Все, что вам нужно сделать, это изменение

   int iCount = 0; 

в

   int iCount = 1; 

этак пропустить первый столбец в вашей цикл и столбца ID, столбец 0 не будет отображаться в ваш предварительный просмотр печати

 Смежные вопросы

  • Нет связанных вопросов^_^