Setting the DefColWidth property at run time does not affect existing columns, only those that are subsequently created in code.
In bound mode, some data sources do not provide text field widths when requested by the list. Therefore, if DefColWidth is 0, the actual column widths may not be what you expect since the list must supply a default width.