我有一个由数据表加载的datagridview ..
//dgvApprovazione is my DataGridView
//dt is my DataTable
dgvApprovazione.DataSource = dt;
DataTable表示db中表的一部分。
我尝试使用此代码
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 中的最后一行。
答案 0 :(得分:2)
要禁用添加新行(删除最后一个新行):
DataGridView.AllowUserToAddRows
设为false
。继续添加新行但隐藏和禁用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)
从逻辑角度删除该复选框也没有太大意义,因为它属于复选框列,应该在那里。