我的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
答案 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())