我有一个由数据表加载的 datagridview..
//dgvApprovazione is my DataGridView
//dt is my DataTable
dgvApprovazione.DataSource = dt;
DataTable 代表数据库中表的一部分。
我尝试使用这段代码
foreach (DataGridViewRow row in dgvApprovazione.Rows)
{
if (row.Cells[3].Value != null)
{
//CheckBox ckb = row.Cells[3] is check
if ((Convert.ToBoolean(row.Cells[3].Value)) == true)
{
row.Cells[3].ReadOnly = true;
}
}
}
但我认为问题出在设置DataTable dt
...
我如何删除该复选框?!?
这是第二个问题..我如何删除datagridview中数据表和的最后一行。
最佳答案
要禁用添加新行(删除最后一个新行):
保持添加新行启用但隐藏和禁用复选框
- 处理
CellPainting
并且不渲染复选框 - 处理
CellContentClick
并检查单元格是否位于最后一行,不执行任何操作 - 要防止自动选中和取消选中,请将列
ReadOnly
属性设置为false
。
如果你不想渲染复选框,你应该处理 CellPainting
事件并阻止绘制复选框:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
// I suppose your check box is at column index 0
if (e.ColumnIndex == 0 && e.RowIndex == dataGridView1.NewRowIndex)
{
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
这不会阻止单击单元格,如果您想阻止运行最后一行单击时的逻辑,您应该处理 CellContentClick
事件并检查单击的单元格是否不是新行:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
// I suppose your check box is at column index 0
// To exclude header cell: e.RowIndex >= 0
// To exclude new row: celle.RowIndex!=dataGridView1.newRowIndex
if (e.ColumnIndex == 0 && e.RowIndex >= 0 && e.RowIndex!=dataGridView1.newRowIndex)
{
//Put the logic here
}
}
关于c# - 隐藏或禁用 DataGridView 最后一行中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36279617/