如何通过复选框启用和禁用 DataGridView 中的特定行?
How to enable and disable particular row in DataGridView by checkbox?
我正在尝试通过选中和取消选中 gridview 中的复选框来启用和禁用 DataGridView 中的特定行。 (C# Windows 应用程序)
我尝试使用 CellClick 事件,但没有按预期工作。
这是我试过的代码
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && dataGridView1.CurrentCell.Selected == true)
{
dataGridView1.Columns[3].ReadOnly = false;
}
}
请告诉我该怎么做。
提前致谢
好吧,您将只读 属性 设置为 false,这意味着它不是只读的。尝试将其设置为 true。此外,触发此事件的应该是复选框单击事件(双击复选框以创建事件处理程序)。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
dataGridView1.Columns[3].ReadOnly = true;
}
另外,看看冷冻的属性。
dataGridView1.Columns[3].Frozen = true;
我想你错过了 CellContentClick 事件,试试这个:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Your Column Name"].Index) //To check that we are in the right column
{
dataGridView1.EndEdit(); //Stop editing of cell.
if ((bool)dataGridView1.Rows[e.RowIndex].Cells["Your Column Name"].Value)
{
//dataGridView1.Columns[3].ReadOnly = true;// for entire column
int colIndex = e.ColumnIndex;
int rowIndex = e.RowIndex;
dataGridView1.Rows[colIndex].Cells[rowIndex].ReadOnly = true;
}
}
}
您可以简单地使用 dataGridView "CellContentClick" 事件。代码如下。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var _dataGrid = (DataGridView)sender;
//Give your checkbox column Index
int chkBoxColumnIndex = 1;
if (e.ColumnIndex == chkBoxColumnIndex && e.RowIndex >= 0)
{
bool isChecked = _dataGrid[chkBoxColumnIndex, e.RowIndex].Value == null ? false : (bool)_dataGrid[chkBoxColumnIndex, e.RowIndex].Value;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
_dataGrid[i, e.RowIndex].ReadOnly = isChecked;
}
}
}
我正在尝试通过选中和取消选中 gridview 中的复选框来启用和禁用 DataGridView 中的特定行。 (C# Windows 应用程序)
我尝试使用 CellClick 事件,但没有按预期工作。
这是我试过的代码
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && dataGridView1.CurrentCell.Selected == true)
{
dataGridView1.Columns[3].ReadOnly = false;
}
}
请告诉我该怎么做。
提前致谢
好吧,您将只读 属性 设置为 false,这意味着它不是只读的。尝试将其设置为 true。此外,触发此事件的应该是复选框单击事件(双击复选框以创建事件处理程序)。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
dataGridView1.Columns[3].ReadOnly = true;
}
另外,看看冷冻的属性。
dataGridView1.Columns[3].Frozen = true;
我想你错过了 CellContentClick 事件,试试这个:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Your Column Name"].Index) //To check that we are in the right column
{
dataGridView1.EndEdit(); //Stop editing of cell.
if ((bool)dataGridView1.Rows[e.RowIndex].Cells["Your Column Name"].Value)
{
//dataGridView1.Columns[3].ReadOnly = true;// for entire column
int colIndex = e.ColumnIndex;
int rowIndex = e.RowIndex;
dataGridView1.Rows[colIndex].Cells[rowIndex].ReadOnly = true;
}
}
}
您可以简单地使用 dataGridView "CellContentClick" 事件。代码如下。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var _dataGrid = (DataGridView)sender;
//Give your checkbox column Index
int chkBoxColumnIndex = 1;
if (e.ColumnIndex == chkBoxColumnIndex && e.RowIndex >= 0)
{
bool isChecked = _dataGrid[chkBoxColumnIndex, e.RowIndex].Value == null ? false : (bool)_dataGrid[chkBoxColumnIndex, e.RowIndex].Value;
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
_dataGrid[i, e.RowIndex].ReadOnly = isChecked;
}
}
}