隐藏或禁用DataGridView的最后一行中的CheckBox

时间:2016-03-29 08:53:57

标签: c# winforms datagridview datatable

我有一个由数据表加载的datagridview ..

//dgvApprovazione is my DataGridView
//dt is my DataTable
dgvApprovazione.DataSource = dt;

DataTable表示db中表的一部分。

我遇到这种情况: enter image description here

我尝试使用此代码

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中删除数据表 AND 中的最后一行。

2 个答案:

答案 0 :(得分:2)

要禁用添加新行(删除最后一个新行):

继续添加新行但隐藏和禁用CheckBox

  • 处理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
    }
}

答案 1 :(得分:1)

删除最后一行public ActionResult Impersonation() { return PartialView("Impersonation"); } [HttpPost] public ActionResult Impersonation(FAB_View model) { if (ModelState.IsValid) { UserRoleHelper userrolehelper = new UserRoleHelper(); bool validuser = userrolehelper.CheckValidUser(model.UserName); if (validuser == false) { ViewBag.Error = "Don't have such user!"; return PartialView("Impersonation"); } userrolehelper.StartImpersonate(model.UserName); } return PartialView("Impersonation"); }

同样的事情:DataGridView.Rows.RemoveAt(DataGridView.Rows.Count - 1)

不允许在所有设置DataTable.Rows.RemoveAt(DataTable.Rows.Count - 1)

的新空行

从逻辑角度删除该复选框也没有太大意义,因为它属于复选框列,应该在那里。