DataGridView复选框-打印选中的行

本文关键字:打印 复选框 DataGridView | 更新日期: 2023-09-27 18:21:06

我是编程初学者。我创建了一个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
        }
    }
}

DataGridView复选框-打印选中的行

要检测选中的行,当第一列是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));
}

向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)方法清除未选中的行。然后使用dgv.Columns.Columns.Remove("column_name")清除复选框列本身。