0

在 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)我怎样才能满足我的需求?

4

1 回答 1

1

原来这是一个简单的错字:

如果您仔细查看分配变量的行drCurrRow,在第一个代码块中 - 工作 DGV 的代码 - 我有DataRow drCurrRow = dtXref.Rows[intRowIndex];,但在第二个代码块中,我有第二个 DGV DataRow drCurrRow = dgvDefaults.Rows[intRowIndex];DataRow是 a 中的一行DataTable,aDataGridViewRow是 a 中的一行DataGridView。所以 JQSOFT 的最后一条评论是正确的 - 由于两个字母的错字,我将 DataGridViewRow 转换为 DataRow。

于 2020-06-23T19:02:59.567 回答