C# WinForms プロジェクトでは、同様の機能を持つ 2 つの DGV がありますが、データは異なります。
それぞれについて、ユーザーが編集可能なセルの値をCellValueChanged
変更すると、ユーザーが入力した値がセルにあった値と異なる場合にセルの色を変更するために使用しています。
これがそのコードです。すべてが必要に応じて意図したとおりに機能します。
private void dgvXref_CellValueChanged(Object sender, DataGridViewCellEventArgs e)
{
int intRowIndex = dgvXref.CurrentCell.RowIndex;
int intColIndex = dgvXref.CurrentCell.ColumnIndex;
DataRow drCurrRow = dtXref.Rows[intRowIndex];
string strOriginalValue = drCurrRow[intColIndex, DataRowVersion.Original].ToString();
string strEnteredValue = drCurrRow[intColIndex, DataRowVersion.Proposed].ToString();
if (strOriginalValue != strEnteredValue)
{
dgvXref.Rows[intRowIndex].Cells[intColIndex].Style.BackColor = Color.Yellow;
}
else
{
dgvXref.Rows[intRowIndex].Cells[intColIndex].Style.BackColor = Color.Empty;
}
}
他の DGV についても同じことを行う必要があるため、コードをコピーして貼り付け、DGV の名前を変更しました。
private void dgvDefaults_CellValueChanged(Object sender, DataGridViewCellEventArgs e)
{
int intRowIndex = dgvDefaults.CurrentCell.RowIndex;
int intColIndex = dgvDefaults.CurrentCell.ColumnIndex;
DataRow drCurrRow = dgvDefaults.Rows[intRowIndex];
string strOriginalValue = drCurrRow[intColIndex, DataRowVersion.Original].ToString();
string strEnteredValue = drCurrRow[intColIndex, DataRowVersion.Proposed].ToString();
if (strOriginalValue != strEnteredValue)
{
dgvDefaults.Rows[intRowIndex].Cells[intColIndex].Style.BackColor = Color.Yellow;
}
else
{
dgvDefaults.Rows[intRowIndex].Cells[intColIndex].Style.BackColor = Color.Empty;
}
}
私の問題は、2 番目の DGV の場合、そのdgvDefaults.Rows[intRowIndex]
下に赤いエラー行が表示され、「型 'System.Windows.Forms.DataGridViewRow' を 'System.Data.DataRow' に暗黙的に変換できません。他の DGV で同じことを行っていますが、エラーは発生せず、正常に動作しています。各 DGV の DataSet は同じように設定されており、DGV のプロパティも同じです。唯一の違いは、それらが保持するデータです。
2 番目の DGV のdrCurrRow
コードを に変更しようとDataGridViewRow drCurrRow = dgvDefaults.Rows[intRowIndex];
しましたが、エラーはありませんが、それを使用して元のバージョンと提案されたバージョンを取得する方法がわかりません。
A) 最初の DGV ではなく 2 番目の DGV の行でエラーが発生するのはなぜですか? B) この必要性をどのように達成できますか?