为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
qq_花开花谢_0 2021-08-22 18:10:22
我的 DataGridView 带有带有此格式属性的列 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?我已经这样做了,但这是暂时的,因为我有很多列并且不想每次都创建其他方法来摆脱格式。switch (dataGridView1.Columns[e.ColumnIndex].Name){    case "KOLICINA":        if (dataGridView1.SelectedCells[0].Value == e.FormattedValue)            return;        dataGridView1.Rows[e.RowIndex].Cells["KOLICINA"].Value = e.FormattedValue;        dataGridView1.Rows[e.RowIndex].Cells["PRODAJNAVREDNOSTSAPOPUSTOM"].Value = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells["KOLICINA"].Value) * Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells["PRODAJNACENASAPOPUSTOM"].Value);        dataGridView1.Rows[e.RowIndex].Cells["PRODAJNAVREDNOST"].Value = Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells["KOLICINA"].Value) * Convert.ToDouble(dataGridView1.Rows[e.RowIndex].Cells["PRODAJNACENA"].Value);        PresaberiStavku(dataGridView1.Rows[e.RowIndex], false);        break;    case "RABAT":        if (Convert.ToDouble(dataGridView1.SelectedCells[0].Value) == Convert.ToDouble(M.String.LeaveOnlyNumbers(e.FormattedValue.ToString())))            return;}
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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

  • 单元格的值保持不变,格式用于显示目的。

  • 在单元格中输入数据时,您应该输入没有任何格式的数据,例如具有0%as Format,如果您键入50%值,则它无效,但50有效并且将显示为50%

  • 输入数据时,如果不更改单元格中的任何内容,则DataGridView.IsCurrentCellDirty返回false,否则返回true

  • e.FormattedValue 始终包含单元格中显示的文本。

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

例如,知道单元格不脏,您可以返回。否则您需要检查是否e.FormattedValue可以转换为ValueType列。请记住,50%在使单元格变脏的情况下键入是无效数据。


查看完整回答
反对 回复 2021-08-22
?
GCT1015

TA贡献1827条经验 获得超4个赞

尝试替换e.FormattedValuedecimal.Parse(e.FormattedValue.TrimEnd(new char[] { '%', ' ' })).ToString(),并在末尾添加一个 .ToString()dataGridView1.SelectedCells[0].Value所以它是这样的dataGridView1.SelectedCells[0].Value.ToString()

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


查看完整回答
反对 回复 2021-08-22
  • 2 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信