The default value for data and filter cells in the CGridColumn class is , with no option for modifying this default. This is not normally a problem since CDataColumn overrides these methods, however CButtonColumn does not override the renderFilterCellContent method, and as such, when using a CButtonColumn in a CGridView with filtering enabled, there is no way to prevent the entity being used in the filter cell for the CButtonColumn.
This breaks Ajax xhtml, since the entity is not defined, meaning that to use Ajax pagination in a CGridView page served as xhtml, it is neccessary to extend the CButtonColumn class just to override the renderFilterCellContent method in order for the Ajax request to be correctly inserted into the page.
It seems to me therefore, that either CButtonColumn (and any other similar CColumn classes) should override the renderFilterCellContent method and add an option to allow us to configure another value, or (the best option in my view), CGridColumn should have an extra defaultNull parameter, which is then used as the default value in the rendering methods.
Yes, but that doesn’t affect column headers and footers - if you look at the base column class CGridColumn, for the renderFilterCellContent method and another one (I can’t remember offhand which one), is hard-coded as the cell content. The CDataColumn class then overrides those methods (maybe using the CGridView nullDisplay, I’m not sure), but CButtonColumn does not override the methods, so inherits the base ones from CGridColumn with the hard-coded - not ideal!