如何打印单行DataGridView

时间:2015-09-08 13:48:40

标签: c# .net winforms printing datagridview

大家好我几周来一直在寻找这个帮助而且还没有得到答案 我去了......我有一个datagridview,这个DGV有一个名为(" print")的ColumnCheckBox和其他3列(Number,Description,Price) 当我通过单击ColumnCheckBox(" Print")选择一行时,我想从上面提到的3列中获取行的值。通过单击打印按钮,它将仅打印每一行选定的行!伙计们我的所有搜索都会创建一个阵列,然后从阵列中打印出来,但我不知道怎么做!

每个答案都将得到尝试和赞赏

1 个答案:

答案 0 :(得分:1)

通过这种方式,您可以使用某些条件找到一行,例如,您可以找到第一个选中的行:

var firstCheckedRow = this.myDataGridView.Rows.Cast<DataGridViewRow>()
                          .Where(row => (bool?)row.Cells["MyCheckBoxColumn"].Value == true)
                          .FirstOrDefault();

通过这种方式,您可以获取行中所有单元格的值,例如,您可以将主题放在不同行的字符串中:

var builder = new StringBuilder();
firstCheckedRow.Cells.Cast<DataGridViewCell>()
               .ToList().ForEach(cell =>
               {
                   builder.AppendLine(string.Format("{0}", cell.Value));
               });

然后你可以举例说明:

MessageBox.Show(builder.ToString());

甚至您可以在表单上放置PrintDocument并处理PrintPage事件以将其打印到打印机。您还应该在表单上添加Button,然后点击按钮事件,调用PrintDocument1.Print();

<强>代码:

private void Button1_Click(object sender, EventArgs e)
{
    PrintDocument1.Print();
}

PrintDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    var firstCheckedRow = this.myDataGridView.Rows.Cast<DataGridViewRow>()
                              .Where(row => (bool?)row.Cells["MyCheckBoxColumn"].Value == true)
                              .FirstOrDefault();
    var builder = new StringBuilder();
    firstCheckedRow.Cells.Cast<DataGridViewCell>()
                   .ToList().ForEach(cell =>
                   {
                       builder.AppendLine(string.Format("{0}", cell.Value));
                   });

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