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

我的 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;

}


qq_花开花谢_0
浏览 174回答 2
2回答

慕婉清6462132

在具有格式的单元格中输入数据时,您应该考虑以下事实:单元格的值保持不变,格式用于显示目的。在单元格中输入数据时,您应该输入没有任何格式的数据,例如具有0%as Format,如果您键入50%值,则它无效,但50有效并且将显示为50%。输入数据时,如果不更改单元格中的任何内容,则DataGridView.IsCurrentCellDirty返回false,否则返回true。e.FormattedValue 始终包含单元格中显示的文本。了解上述事实,我相信您有足够的信息来完成您正在尝试做的事情。例如,知道单元格不脏,您可以返回。否则您需要检查是否e.FormattedValue可以转换为ValueType列。请记住,50%在使单元格变脏的情况下键入是无效数据。

GCT1015

尝试替换e.FormattedValue为decimal.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())
打开App,查看更多内容
随时随地看视频慕课网APP