DataGridView CheckBox - 打印选中的行

时间:2015-11-09 09:23:04

标签: c# winforms printing datagridview

我是编程的初学者。 我创建了一个sql查询来填充DataGridView,我在Column[0]一个CheckBox列中添加了。我创建了检查事件。但我不知道如何向前迈进。我想做

  • 第一步:添加一个检查完成按钮和一个事件,仅显示选中的列。

  • 第二步:所有选中的行以单元格1(名称)和单元格2(ID)以某种方式打印。

  • 第三步:我想创建一个模板,在矩形或某个对象中将此名称和ID打印为A4格式。

因为我是新来的,所以我需要很多帮助!

提前致谢!

ps:所有步骤对我来说都是一个很大的帮助!

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (string.Compare(dataGridView1.CurrentCell.OwningColumn.Name, "Checked") == 0)
    {
        bool checkBoxStatus = Convert.ToBoolean(dataGridView1.CurrentCell.EditedFormattedValue);

        //"CheckBoxColumn" column value is checked or not. 
        if (checkBoxStatus)
        {
            MessageBox.Show("1");//for check it works or not
        }
        else
        {
            MessageBox.Show("0");//for check it works or not
        }
    }
}

2 个答案:

答案 0 :(得分:1)

要检测已检查的行,当您的第一列为DataGridViewCheckBoxColumn时,您可以使用以下代码:

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

对于其余问题,您可以使用以下任一选项:

选项1:创建RDLC Report

如果您使用DataTable或业务对象作为网格模型,则只需创建RDLC报告并将选中的行传递给报告并打印报告。

选项2:使用PrintDocument

打印

要打印,请使用PrintDocument并处理PrintPage事件,并将打印逻辑和代码放在那里。要触发打印事件,只需在代码中的某处调用printDocument1.Print()即可。

您可以循环checkedRows并使用e.Graphics.DrawString打印每行的值。

例如:

private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    //Find all checked rows
    var allCheckedRows = this.dataGridView1.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 concatenate values using ", " as separator, and added to output
        builder.AppendLine(string.Join(", ", cellValues));     
    });

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

答案 1 :(得分:0)

向DataGridView添加按钮:

DataGridViewButtonColumn editButton = new DataGridViewButtonColumn();
editButton.HeaderText = "Edit";
editButton.Text = "Edit";
editButton.UseColumnTextForButtonValue = true;
editButton.Width = 80;
dbgViewObj.Columns.Add(editButton);

修改 您可以从前一个创建一个新的DataTable并迭代for循环以检查复选框的状态,并使用dgv.Rows.RemoveAt(index)方法清除未检查的行。然后使用{{1清除复选框列本身。