2015-09-09 43 views
0

我有一個Datagridview它有一個checkboxcolumn! 當數據加載標準的所有行得到檢查!但我需要取消它們中的一些和它們,將它的值發送到var並打印它!如何只從c中的datagridview打印選中的行#

是否有可能?

例:

-------------------------------------------------------------- 
ColumnCheckBox  | Column1  | Column2  | Column3 
-------------------------------------------------------------- 
checked   | 1251000014 | portraitx  | U$ 125.00 
checked   | 1251000021 | notebooky  | U$ 899.96 
unchecked   | 1265888512 | tabletx  | U$ 899.96 
checked   | 1251444251 | iphoness  | U$ 566.26 
unchecked   | 1255222142 | opticalreader | U$ 99.99 

我想選中行的值和發送到VAR和打印了!主要是...如何發送這個值到一個var?

thankx提前!

+0

喜禮Aghaei,人我試了很多方法來驗證碼適應我的幻燈ct和它是有用的部分...我仍然需要採取這個值=> 1251000014,這個值=> portraitx,並且這個值=> U $ 125.00到三個變量並打印它並在打印之後清除這3個變量並採取下一個檢查的行值也是這樣做的!當我選擇2行或更多行。變量不會被清除,所以它會在前一個值上打印當前值!現在當我選擇2行或更多行時,代碼將值發送到單個文檔而不是打印到每個文檔,作爲2個檢查行兩個文檔 –

+0

準確Reza Aghaei!這正是我所需要的,我會嘗試將您的代碼調整到我的項目中,並且很快會發布結果!但這就是它在新文件中的每條記錄 –

+0

嘿,我要成功!很快我會發布修改!根據列數量等於三,進行了一些修改以便將建築者內容分成三份!很快我會投票你的答案作爲有用的...先謝謝了人! –

回答

0

打印所有的頁籤行:

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    //Find all checked rows 
    var allCheckedRows = this.myDataGridView.Rows.Cast<DataGridViewRow>() 
           .Where(row => (bool?)row.Cells[0].Value == true) 
           .ToList(); 

    //create a stringBuilder that will contain the string for all checked rows 
    var builder = new StringBuilder(); 

    //For each checked row, create string presentation of row and add to output stringBuilder 
    allCheckedRows.ForEach(row => 
    { 
     //Create an array of all cell value of a row to then concatenate them using a separator 
     var cellValues = row.Cells.Cast<DataGridViewCell>() 
      .Where(cell => cell.ColumnIndex > 0) 
      .Select(cell => string.Format("{0}", cell.Value)) 
      .ToArray(); 

     //Then joiconcatenate values using ", " as separator, and added to output 
     builder.AppendLine(string.Join(", ", cellValues)); 
     //Here instead of adding them to the stringBuilder, you can add int to another list.  
    }); 

    //Print the output string 
    e.Graphics.DrawString(builder.ToString(), 
       this.myDataGridView.Font, 
       new SolidBrush(this.myDataGridView.ForeColor), 
       new RectangleF(0, 0, this.printDocument1.DefaultPageSettings.PrintableArea.Width, this.printDocument1.DefaultPageSettings.PrintableArea.Height)); 
} 

輸出:

1251000014, portraitx, U$ 125.00 
1251000021, notebooky, U$ 899.96 
1251444251, iphoness, U$ 566.26 

打印在一個單獨的頁面中的每個檢查行:

private int currentPrintingRowIndex = 0; 

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    var allCheckedRows = this.myDataGridView.Rows.Cast<DataGridViewRow>() 
           .Where(row => (bool?)row.Cells[0].Value == true) 
           .ToList(); 

    if (allCheckedRows.Count > currentPrintingRowIndex) 
    { 
     var builder = new StringBuilder(); 
     var currentCheckedRow = allCheckedRows[currentPrintingRowIndex]; 

     var cellValues = currentCheckedRow.Cells.Cast<DataGridViewCell>() 
       .Where(cell => cell.ColumnIndex > 0) 
       .Select(cell => string.Format("{0}", cell.Value)) 
       .ToArray(); 

     builder.AppendLine(string.Join(", ", cellValues)); 

     e.Graphics.DrawString(builder.ToString(), 
        this.myDataGridView.Font, 
        new SolidBrush(this.myDataGridView.ForeColor), 
        new RectangleF(0, 0, this.printDocument1.DefaultPageSettings.PrintableArea.Width, this.printDocument1.DefaultPageSettings.PrintableArea.Height)); 

     currentPrintingRowIndex += 1; 
     e.HasMorePages = allCheckedRows.Count > currentPrintingRowIndex; 
    } 
} 

輸出:

用3頁的文檔:

Page1 content: 1251000014, portraitx, U$ 125.00 
Page2 content: 1251000021, notebooky, U$ 899.96 
Page3 content: 1251444251, iphoness, U$ 566.26 
0

****這是關於以上很有幫助代碼禮Aghaei ****

  private int currentPrintingRowIndex = 0; 

      private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
最終代碼

{

  Font fsystem = new Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Pixel); 
      Font fdatabd = new Font("Arial", 10, FontStyle.Regular, GraphicsUnit.Pixel); 

      Font fdatabdstrikeout = new Font("Arial", 18, FontStyle.Strikeout, GraphicsUnit.Pixel); 
      Font fdiag = new Font("Arial", 8, FontStyle.Regular, GraphicsUnit.Pixel); 
      Font fbarra = new Font("C39HrP24DhTt", 30, FontStyle.Regular, GraphicsUnit.Pixel); 
      Font fdesc = new Font("Arial", 8, FontStyle.Bold, GraphicsUnit.Pixel); 


      var allCheckedRows = this.dgv1.Rows.Cast<DataGridViewRow>() 
          .Where(row => (bool?)row.Cells[0].Value == true) 
          .ToList(); 

     if (allCheckedRows.Count > currentPrintingRowIndex) 
     { 
      var builder = new StringBuilder(); 


      var currentCheckedRow = allCheckedRows[currentPrintingRowIndex]; 


      var cellValues = currentCheckedRow.Cells.Cast<DataGridViewCell>() 
        .Where(cell => cell.ColumnIndex > 0) 
        .Select(cell => string.Format("{0}", cell.Value)) 
        .ToArray(); 



      builder.Append(string.Join(",", cellValues)); 

      // begin of the aditional implementation 

      string ldp = builder.ToString(); 
      string[] cadaum = ldp.Split(','); 

      var cents = cadaum[3].Substring(0, 2); 

      var descr = cadaum[1].ToString(); 

      if (descr.Length >= 30) 
      { 
       var descr2 = descr.Substring(0, 30); 
       var descr3 = descr.Substring(30); 

     // end of the aditional implementation 

     // begin modification 


     //UPPER LEFT SIDE 

     e.Graphics.DrawString("TRADEMARK", fsystem, Brushes.Black, 45, 8); 

       e.Graphics.DrawString("COMPANY'S NAME", fdatabd, Brushes.Black, 10, 30); 

       e.Graphics.DrawString("ANY OTHER INFORMATION", fdatabd, Brushes.Black, 10, 41); 

       e.Graphics.DrawString("made in china", fdatabd, Brushes.Black, 10, 53); 

       if (cadaum[1].Length >= 30) 
       { 
        e.Graphics.DrawString(descr2, fdatabd, Brushes.Black, 10, 77); 
       } 

       e.Graphics.DrawString(descr3, fdatabd, Brushes.Black, 10, 87); 

       e.Graphics.DrawString("*" + cadaum[0].ToString() + "*", fbarra, Brushes.Black, 8, 105); 


       // UPPER RIGHT SIDE 

       e.Graphics.DrawString("TRADEMARK", fsystem, Brushes.Black, 205, 8); 

       e.Graphics.DrawString("COMPANY'S NAME", fdatabd, Brushes.Black, 170, 30); 

       e.Graphics.DrawString("ANY OTHER INFORMATION", fdatabd, Brushes.Black, 170, 41); 

       e.Graphics.DrawString("made in china", fdatabd, Brushes.Black, 170, 53); 

       if (cadaum[1].Length >= 30) 
        { 
        e.Graphics.DrawString(descr2, fdatabd, Brushes.Black, 170, 77);      } 

       e.Graphics.DrawString(descr3, fdatabd, Brushes.Black, 170, 87); 

       e.Graphics.DrawString("*" + cadaum[0].ToString() + "*", fbarra, Brushes.Black, 168, 105); 



       // CUTTING REFERENCE 


      e.Graphics.DrawString("---------------------------------------------------------------------------------------------", fdatabd, Brushes.Black, 1, 147); 


       //LOWER LEFT SIDE 

        e.Graphics.DrawString(descr2, fdatabd, Brushes.Black, 10, 155); 

        e.Graphics.DrawString(descr3, fdatabd, Brushes.Black, 10, 165); 


        e.Graphics.DrawString("*" + cadaum[0].ToString() + "*", fbarra, Brushes.Black, 8, 177); 

        e.Graphics.DrawString("Price:", fdatabd, Brushes.Black, 10, 208); 



        e.Graphics.DrawString(cadaum[2].ToString() +"," + cents.ToString(), fdatabd, Brushes.Black, 80, 208); 

        e.Graphics.DrawString("TRADEMARK", fsystem, Brushes.Black, 45, 220); 


       // LOWER RIGHT SIDE 


       e.Graphics.DrawString(descr2, fdatabd, Brushes.Black, 170, 155); 

       e.Graphics.DrawString(descr3, fdatabd, Brushes.Black, 170, 165); 


       e.Graphics.DrawString("*" + cadaum[0].ToString() + "*", fbarra, Brushes.Black, 168, 177); 

       e.Graphics.DrawString("Price:", fdatabd, Brushes.Black, 170, 208); 

       e.Graphics.DrawString(cadaum[2].ToString() + "," + cents.ToString(), fdatabd, Brushes.Black, 240, 208); 

       e.Graphics.DrawString("TRADEMARK", fsystem, Brushes.Black, 205, 220); 

      // end modification 

       currentPrintingRowIndex += 1; 
       e.HasMorePages = allCheckedRows.Count > currentPrintingRowIndex;