我有一個帶有按鈕列的 datagridview 的 GUI。

單擊按鈕單元格后,我將按鈕啟用屬性設定為 false。

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
//....
DataGridViewDisableButtonCell btnClick = (DataGridViewDisableButtonCell)dataGridView4.Rows[e.RowIndex].Cells[e.ColumnIndex];
btnClick.Enabled = false;
//execude code
btnClick.Enabled = true;
}
}
我的問題是如何使另一個單元格不可點擊,以防止在單擊按鈕單元格之一時運行代碼?
uj5u.com熱心網友回復:
您需要獲取型別的單元格DataGridViewDisableButtonCell以獲取或設定其屬性。為避免重復相同的代碼,請創建一個方法來切換Enabled屬性。
private void SetEnabled(bool enabled)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(x => x.Cells
.OfType<DataGridViewDisableButtonCell>()))
cell.Enabled = enabled;
}
如果您有多個該型別的列并且您想將更改應用于特定的列,那么您需要指定目標列:
private void SetEnabled(bool enabled, int columnIndex)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(c => c.Cells
.OfType<DataGridViewDisableButtonCell>()
.Where(col => col.OwningColumn.Index == columnIndex)))
cell.Enabled = enabled;
}
在您的代碼中使用該方法:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var senderGrid = sender as DataGridView;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
SetEnabled(false);
// Or
// SetEnabled(false, e.ColumnIndex);
//execude code
SetEnabled(true);
// Or
// SetEnabled(true, e.ColumnIndex);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389775.html
