在 C# WinForms 项目中,我有两个功能相似的 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;
}
}
我的问题是,对于第二个 DGV,它下面dgvDefaults.Rows[intRowIndex]
有一条红色错误线,上面写着:“不能隐式转换类型 'System.Windows.Forms.DataGridViewRow' 所以 'System.Data.DataRow'。这完全让我感到困惑,因为我”我在另一个 DGV 上做同样的事情,但没有错误,运行良好。每个 DGV 的数据集设置相同,DGV 的属性相同 - 唯一的区别是它们持有的数据。
我尝试将第二个 DGV 的drCurrRow
代码更改为DataGridViewRow drCurrRow = dgvDefaults.Rows[intRowIndex];
并且没有错误,但我无法弄清楚如何使用它来获取原始版本和建议版本。
A)为什么我在第二个 DGV 而不是第一个 DGV 的那条线上出现错误和 B)我怎样才能满足我的需求?