フォームに 2 つの DataGridView コントロールがあります。どちらも列の数と種類は同じです。1 つの TextBox 列と 2 つの CheckBoxColumns。問題は、最初の DataGridView は正常に動作しているが、もう 1 つは動作していないことです。どちらも同じバインディング メソッドとデータソースを持っています。同じフォームの 2 番目の DataGridView の問題は..
チェックボックスの値が設定されていません
値を取得しようとすると、currentrow.Tag の値が null です
以下は、DataGridViews をバインドし、チェックボックスの値を設定するために使用しているコードです。
public void BindGridView(DataGridView gv)
{
var actuallist = UserOperations.GetPermissions(RoleId, (int)(Enumerations.ModuleType.Basic));
Common.Common.StyleGridView(gv);
gv.AutoGenerateColumns = false;
gv.Columns["ModuleName"].DataPropertyName = "ModuleName";
gv.DataSource = actuallist;
int j = 0;
foreach (DataGridViewRow row in gv.Rows)
{
row.Tag = actuallist[j++].ModuleId;
}
int k = 0;
bool r = false;
foreach (DataGridViewRow row in gv.Rows)
{
r = actuallist[k++].PermissionGranted;
if (r)
((DataGridViewCheckBoxCell)row.Cells[1]).Value = r;
else
((DataGridViewCheckBoxCell)row.Cells[2]).Value = !r;
}
}
private void gvPermissions_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (gvPermissions.Columns[e.ColumnIndex].Name == "Granted")
{
bool isChecked = (bool)gvPermissions[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
gvPermissions.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !isChecked;
gvPermissions.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value = isChecked;
gvPermissions.EndEdit();
}
if (gvPermissions.Columns[e.ColumnIndex].Name == "Denied")
{
bool isChecked = (bool)gvPermissions[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
gvPermissions.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !isChecked;
gvPermissions.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value = isChecked;
gvPermissions.EndEdit();
}
}