格式化的单元格值不等于单元格值,即使是由于格式化

时间:2018-06-20 13:34:57

标签: c# winforms datagridview

我的DataGridView的列具有此格式设置属性html = html+'<td>'+data[index].fileName+'</td><td><a href="'+url+'"><span class="fa fa-download"> Download</span></a></td>';

因此,当我进入单元并退出时,我的dataGridView1.Columns["RABAT"].DefaultCellStyle.Format = "0\\%";事件触发。在这里,我有一个简单的检查方法,即在该位置检查该单元格的旧值是否等于新值,如果不是,则不要继续执行代码,看起来像这样

dataGridView1_CellValidating

现在的问题是,由于if (dataGridView1.SelectedCells[0].Value == e.FormattedValue) return; 的格式属性,我得到了dataGridView1.SelectedCells[0].Value的返回,但是由于10我得到了e.FormattedValue的返回,并且由于这两个值是不一样。

我可以做的(并且知道如何做)是从10%中删除数字以外的所有内容,然后进行比较,因为在这种情况下,此列中只有整数,但是对于将来的代码,我该如何从中删除格式样式e.FormattedValue

我已经这样做了,但是这是临时的,因为我有很多列,并且不想每次都使用其他方法来摆脱格式。

e.FormattedValue

2 个答案:

答案 0 :(得分:1)

在具有格式的单元格中输入数据时,应考虑以下事实:

  • 单元格的值保持不变,并且格式化仅用于显示目的。
  • 在单元格中输入数据时,您应该输入没有任何格式的数据,例如将0%设置为Format,如果您输入50%作为值,则无效,但是{{ 1}}有效,并显示为50
  • 输入数据时,如果您不更改单元格中的任何内容,则50%返回DataGridView.IsCurrentCellDirty,否则返回false
  • true始终包含在单元格中显示的文本。

了解上述事实后,我相信您有足够的信息来完成您要尝试做的事情。

例如,知道电池还没脏,您可以返回。否则,您需要检查e.FormattedValue是否可以转换为该列的e.FormattedValue。请记住,如果输入ValueType会使单元格变脏,则该数据是无效的。

答案 1 :(得分:0)

尝试将e.FormattedValue替换为decimal.Parse(e.FormattedValue.TrimEnd(new char[] { '%', ' ' })).ToString(),并在dataGridView1.SelectedCells[0].Value的末尾添加一个.ToString(),就像这样dataGridView1.SelectedCells[0].Value.ToString()

支票应显示为if (dataGridView1.SelectedCells[0].Value.ToString() == decimal.Parse(e.FormattedValue.TrimEnd(new char[] { '%', ' ' })).ToString())