datagridview的CellFormatting事件,为什么cell的值没变呢?该如何处理
datagridview的CellFormatting事件,为什么cell的值没变呢?
在CellFormatting事件中这样写:
然后datagridview1.datasource = dt '绑定数据
显示画面时,这个datagridview1里的数据的Column8列显示为“*”或空白了。
然后修改了dt里的数据后(从数据库重新取得数据集),再次绑定到datagridview1,
然后循环每一行,判断这个列的值是不是“*”,总是不成立,为什么?
这个msgbox始终不会走到,跟踪了一下,发现datagridview1.Rows(i).Cells("Column8").Value值还是"1",而不是"*".
为什么呀?显示没问题呀。
什么时候会激发CellFormatting事件?重新绑定数据会激发吗?
------解决方案--------------------
e.editformatedvalue 试试看呢
------解决方案--------------------
不知道你想要做什么功能,按照你的描述,应该就是事件不对把。
CellFormatting在值改变之前就触发了。
用CellValidating方法,然后用 e.FormattedValue 来取得要设置的值,
DataGridView1.CurrentCell.value 为原先的值。
------解决方案--------------------
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
------解决方案--------------------
实际上单元格的数据值并没有改变,只是显示值变了而已.
------解决方案--------------------
你看看datagridview1.Rows(i).Cells("Column8").Value是不是还是1
------解决方案--------------------
在RowPrePaint事件里面写你那个操作试试。
在CellFormatting事件中这样写:
- VB.NET code
'如果是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,
然后循环每一行,判断这个列的值是不是“*”,总是不成立,为什么?
- VB.NET code
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事件?重新绑定数据会激发吗?
------解决方案--------------------
e.editformatedvalue 试试看呢
------解决方案--------------------
不知道你想要做什么功能,按照你的描述,应该就是事件不对把。
CellFormatting在值改变之前就触发了。
用CellValidating方法,然后用 e.FormattedValue 来取得要设置的值,
DataGridView1.CurrentCell.value 为原先的值。
------解决方案--------------------
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
------解决方案--------------------
实际上单元格的数据值并没有改变,只是显示值变了而已.
------解决方案--------------------
你看看datagridview1.Rows(i).Cells("Column8").Value是不是还是1
------解决方案--------------------
在RowPrePaint事件里面写你那个操作试试。