I had similar problem to Problem #1.
The difference was that my ControlGrid was created statically on dialog, thus I hadn’t to create the model programically:
oModel = createUnoService("com.sun.star.awt.grid.UnoControlGridModel")
but only get this object by:
oModel = oGridControl.getModel()
so the code looked like:
Dim oDataModel As Object
oDataModel = createUnoService("com.sun.star.awt.grid.DefaultGridDataModel")
Dim oModel As Object
oModel = oGridControl.getModel() ' just get model, not create
'oModel.ColumnModel = oColumnModel
oModel.GridDataModel = oDataModel
oModel.ShowColumnHeader = True
The code worked, but had Problem #1.
The solution I found is to re-set the model after modifications:
Dim oDataModel As Object
oDataModel = createUnoService("com.sun.star.awt.grid.DefaultGridDataModel")
Dim oModel As Object
oModel = oGridControl.getModel() ' just get model, not create
'oModel.ColumnModel = oColumnModel
oModel.GridDataModel = oDataModel
oModel.ShowColumnHeader = True
oGridControl.setModel(oModel) ' <--------
and Problem #1 has gone.