I finally got around to doing this. Ended up being really easy once I dug into it.
This is how I did it:
I have a repeating table in the dataset called "Column" which has a field "ColumnWidth" which is the width of the column and "ColumnHead" is the title of the column.
In managed code I have this function:
public string PopulateColumn(string Input)
{
return "<col style=\"WIDTH: " + Input + "px\"></col>";
}
Then in the views .xsl I found the table and rewrote colgroup to look like this:
<
colgroup>
<xsl:for-each select="my:Columns/my:Column">
<xsl:value-of select="xdExtension:Populatecolumn(string(my:ColumnWidth))" disable-output-escaping="yes"></xsl:value-of>
</xsl:for-each>
</colgroup>
And in the <tbody> tag I have things like this:
<
xsl:for-each select="my:Columns/my:Column">
<td>
<div>
<strong>
<span class="xdTextBox" hideFocus="1" title="" tabIndex="0" xd:CtrlId="CTRL169" xd:xctname="PlainText" xd:binding="my:ColumnHead" style="WIDTH: 100%">
<xsl:value-of select="my:ColumnHead"></xsl:value-of>
</span>
</strong>
</div>
</td>
</xsl:for-each>
And of course the template this is in is set with a mode="xd:preserve"
Easy.