VB Migration Partner

KNOWLEDGE BASE - Database and data-binding


Previous | Index | Next 

[PRB] Column formatting via StdDataFormat objects doesn’t work for DataGrid controls

VB Migration Partner support custom formatting in bound controls. References to StdDataFormat objects are converted to VB6StdDataFormat objects and migrated VB.NET applications works like the original VB6 app. VB Migration Partner even support custom formatting by means of the Format and Unformat events of the StdDataFormat class.

However, the custom formatting mechanism works smoothly only for VB6 controls that are rendered as managed .NET controls, such as TextBox and Label. When the bound control is a wrapper around an ActiveX control, as is the case of the DataGrid control, you must edit either the original VB6 code or the migrated VB.NET code.

For example, let’s assume that the original VB6 application includes the following code:

    Dim sdf As New StdDataFormat 
    sdf.FalseValue = "Is False"
    sdf.TrueValue = "Is True"
    Set DataGrid1.Columns(1).DataFormat = sdf

The converted VB.NET code causes a compilation error because you can’t assign a VB6StdDataFormat object (defined in the control support library) to the DataFormat property exposed by columns of the DataGrid ActiveX control:

 Dim sdf As New VB6StdDataFormat()
    sdf.FalseValue = "Is False"
    sdf.TrueValue = "Is True"
    DataGrid1.Columns(1).DataFormat = sdf

You can fix this problem by passing the VB6StdDataFormat object in a ToStdDataFormat6 method:

    Dim sdf As New StdDataFormat 
    sdf.FalseValue = "Is False"
    sdf.TrueValue = "Is True"
    Set DataGrid1.Columns(1).DataFormat = ToStdDataFormat6(sdf)

The ToStdDataFormat6 is defined in the VBMigrationPartner_Support module method and does nothing under VB6. When the code is migrated to VB.NET, however, the method returns an instance of a StdDataFormat COM instance that is equivalent to the VB6StdDataFormat object defined at the top of the code snippet. After this substitution, all works as expected, including Formant and Unformat events.

Notice that the ToStdDataFormat6 method requires a reference to the Microsoft.StdFormat DLL. You can this reference manually after the migration or, better, automatically during the migration by means of an AddReference pragma.

Update: starting with VB Migration Partner 1.10, all references to the DataFormat property of DataGridColumn are migrated as references to the special DataFormat6 property, which takes and returns a VB6StdDataFormat object. For this reason, the fix described in this article is necessary only if the DataFormat property is referenced via late-binding.

Previous | Index | Next 




Follow Francesco Balena on VB6 migration’s group on

LinkedIn





Read Microsoft Corp’s official case study of a VB6 conversion using VB Migration Partner.




Code Architects and its partners offers remote and onsite migration services.

More details




Subscribe to our free newsletter for useful VB6 migration tips and techniques.

newsletter



To learn more about your VB6 applications, run VB6 Analyzer on your source code and send us the generated text file. You will receive a detailed report about your VB6 applications and how VB Migration Partner can help you to quickly and effectively migrate it to .NET.

Get free advice



A fully-working, time-limited Trial Edition of VB Migration Partner allows you to test it against your actual code

Get the Trial




The price of VB Migration Partner depends on the size of the VB6 application, the type of license, and other factors

Request a quote




Migrating a VB6 application in 10 easy steps

Comparing VB Migration Partner with Upgrade Wizard

Migration tools: Feature Comparison Table

All whitepapers