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
}
}
}
要检测选中的行,当第一列是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")
清除复选框列本身。