datagridview的CellFormatting事件,为什么cell的值没变呢?

时间:2022-07-01 13:00:01
在CellFormatting事件中这样写:
 

        '如果是Column8列,值为1时显示为“*”号,否则为空白
        If dgrObj.Columns(e.ColumnIndex).Name = "Column8"  Then
            e.Value = IIf(e.Value.ToString = "1", "*", "")
            e.FormattingApplied = True
        End If


然后datagridview1.datasource = dt  '绑定数据
显示画面时,这个datagridview1里的数据的Column8列显示为“*”或空白了。
然后修改了dt里的数据后(从数据库重新取得数据集),再次绑定到datagridview1,
然后循环每一行,判断这个列的值是不是“*”,总是不成立,为什么?

for i = 0 to datagridview1.rows.count - 1
  If datagridview1.Rows(i).Cells("Column8").Value.ToString.Trim = "*" Then
     msgbox("fjdkskaf")
   End If


这个msgbox始终不会走到,跟踪了一下,发现datagridview1.Rows(i).Cells("Column8").Value值还是"1",而不是"*".
为什么呀?显示没问题呀。
什么时候会激发CellFormatting事件?重新绑定数据会激发吗?

7 个解决方案

#1


e.editformatedvalue 试试看呢

#2


不知道你想要做什么功能,按照你的描述,应该就是事件不对把。
CellFormatting在值改变之前就触发了。
用CellValidating方法,然后用 e.FormattedValue 来取得要设置的值,
DataGridView1.CurrentCell.value 为原先的值。

#3


    Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting, DataGridView2.CellFormatting
        If e.ColumnIndex > -1 AndAlso e.RowIndex > -1 Then
            If DataGridView1.Columns(e.ColumnIndex).Name.Contains("Column8") Then
                e.Value = If(e.Value.ToString.Trim = "1", "*", "")
            End If
        End If
    End Sub

#4


我想问的是
e.Value = If(e.Value.ToString.Trim = "1", "*", "")

显示已经被替换,但是为什么

If datagridview1.Rows(i).Cells("Column8").Value.ToString.Trim = "*" Then

这样的语句却不成立呢?

#5


实际上单元格的数据值并没有改变,只是显示值变了而已.

#6


你看看datagridview1.Rows(i).Cells("Column8").Value是不是还是1

#7


在RowPrePaint事件里面写你那个操作试试。

#1


e.editformatedvalue 试试看呢

#2


不知道你想要做什么功能,按照你的描述,应该就是事件不对把。
CellFormatting在值改变之前就触发了。
用CellValidating方法,然后用 e.FormattedValue 来取得要设置的值,
DataGridView1.CurrentCell.value 为原先的值。

#3


    Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting, DataGridView2.CellFormatting
        If e.ColumnIndex > -1 AndAlso e.RowIndex > -1 Then
            If DataGridView1.Columns(e.ColumnIndex).Name.Contains("Column8") Then
                e.Value = If(e.Value.ToString.Trim = "1", "*", "")
            End If
        End If
    End Sub

#4


我想问的是
e.Value = If(e.Value.ToString.Trim = "1", "*", "")

显示已经被替换,但是为什么

If datagridview1.Rows(i).Cells("Column8").Value.ToString.Trim = "*" Then

这样的语句却不成立呢?

#5


实际上单元格的数据值并没有改变,只是显示值变了而已.

#6


你看看datagridview1.Rows(i).Cells("Column8").Value是不是还是1

#7


在RowPrePaint事件里面写你那个操作试试。