完成后验证单元格编辑

时间:2017-08-02 08:41:13

标签: c# winforms

我正在尝试根据一组规则更改单元格的颜色。一旦人固定了细胞,它应该回到黑白。但是,当我第一次插入数据时,它似乎正在触发,我希望这只是在用户更改了单元格的值时触发。

正确的方法是什么,或者我所拥有的是选项卡并输入密钥检查然后继续下面的代码我必须删除一些字段名称,以便它不会显示我们的结构。< / p>

或者我是否需要为该单元格设置脏状态跟踪器。

private void dgUpdatesPrices_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{

        if (_value== value)
        {
            decimal _spsPrice = Convert.ToDecimal(dgUpdatesPrices.Rows[e.RowIndex].Cells["NewPrice"].Value);
            decimal _spePrice = Convert.ToDecimal(dgUpdatesPrices.Rows[e.RowIndex].Cells["NewPriceEuro"].Value);


            checkSPEThreasholds();
            checkSPSThreasholds();
        }
        if(value== value)
        {
            decimal _sterling = Convert.ToDecimal(dgUpdatesPrices.Rows[e.RowIndex].Cells["Sterling"].Value);
            decimal _euro = Convert.ToDecimal(dgUpdatesPrices.Rows[e.RowIndex].Cells["NewSterling"].Value);

            setupEuroPercentageHightlight();
            setupSterlingPcentageHighlight();

        }

修改2

正如我所建议的那样,我使用了下面的事件,但是我如何告诉它去特定的列,因为我不希望所有的列只是该行的特定值。我不想使用索引,因为可以改变我想使用列名

private void dgUpdatesPrices_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
        MessageBox.Show(dgUpdatesPrices[e.ColumnIndex, e.RowIndex].Value.ToString());

}

编辑3 为了澄清我的意思,如果用户将新的sps价格更改为与SPS价格匹配的34,则应该删除该新sps价格单元格的红色格式。

基本上,如果价格高于或低于sps价格20%,格式化应该消失。 enter image description here

1 个答案:

答案 0 :(得分:0)

要仅使此事件按名称对特定列执行任何操作(请参阅OP的编辑),您可以按以下方式对列进行过滤:

if( e.ColumnIndex == dataGridView.Columns["ColumnName"].Index )
    //do stuff

对OP编辑3的回应:

if(e.ColumnIndex == dataGridView.Columns["ColumnName"].Index)
{
    var column1Index = dataGridView1.Columns[ "ColumnNameA" ].Index;
    var column2Index = dataGridView1.Columns[ "ColumnNameB" ].Index;

    if(dataGridView[column1Index, e.RowIndex].Value.ToString() == dataGridView[column2Index, e.RowIndex].Value.ToString())
    {
        //They match, remove color
    }
}