We need our RadGridView to simply show text (e.g., True/False) instead of a checkbox for boolean values. The grid is read-only, we're binding it to a DataView, and we need to continue to let it auto-generate the columns at runtime.
I assume we just need to prevent the grid from using a GridViewCheckBoxColumn for boolean-typed columns when it auto-generates its columns. What's the best way to do that, with performance being really important? I've tried overriding templates and styles to no avail. Right now I have it working by using a style that overrides the CheckBox's control template and puts a TextBlock there, using a boolean-to-string converter we wrote, but that's not ideal. I really hope I missed something simple!
BTW, the main reason we want to NOT show checkboxes is performance -- we've found that a lot of checkboxes really slow down rendering of the grid. If that problem has been solved, we might leave the checkboxes in there, though I'd still like the option to just show text instead.
Thanks.
I assume we just need to prevent the grid from using a GridViewCheckBoxColumn for boolean-typed columns when it auto-generates its columns. What's the best way to do that, with performance being really important? I've tried overriding templates and styles to no avail. Right now I have it working by using a style that overrides the CheckBox's control template and puts a TextBlock there, using a boolean-to-string converter we wrote, but that's not ideal. I really hope I missed something simple!
BTW, the main reason we want to NOT show checkboxes is performance -- we've found that a lot of checkboxes really slow down rendering of the grid. If that problem has been solved, we might leave the checkboxes in there, though I'd still like the option to just show text instead.
Thanks.
10 Answers, 1 is accepted
0
Hi Phil,
Nik
Telerik
You can use a simple DataColumn with a binding converter in order to achieve what you are looking for.
Hope this helps!
Nik
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0

Phil
Top achievements
Rank 1
answered on 18 Nov 2013, 03:37 PM
Would you explain what you mean by "use a simple DataColumn", or maybe provide a code snippet? The grid's AutoGenerateColumns is True; we need that because we don't know what the data will be at design-time.
0
Hi Phil,
You can use the AutoGeneratingColumn event to see what columns are being created, and replace the e.Column property to GridViewDataColumn, when a CheckBoxColumn is generated.
Hope this helps!
Regards,
Nik
Telerik
You can use the AutoGeneratingColumn event to see what columns are being created, and replace the e.Column property to GridViewDataColumn, when a CheckBoxColumn is generated.
Hope this helps!
Regards,
Nik
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0
Hi Phil,
You can use the AutoGeneratingColumn event to see what columns are being created, and replace the e.Column property to GridViewDataColumn, when a CheckBoxColumn is generated.
Hope this helps!
Regards,
Nik
Telerik
You can use the AutoGeneratingColumn event to see what columns are being created, and replace the e.Column property to GridViewDataColumn, when a CheckBoxColumn is generated.
Hope this helps!
Regards,
Nik
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0

Phil
Top achievements
Rank 1
answered on 19 Nov 2013, 02:34 PM
Hi, Nik.
That solution was our first idea as it seems the logical way to do it. However, in the AutoGeneratingColumns event the incoming e.Column is never of type GridViewCheckBoxColumn, it is always a GridViewDataColumn, even for the column whose data type is boolean (non-nullable bit in SQL Server), and the grid always places a checkbox for that column in the grid. (We're using RadControls for WPF Q3 2013.)
That solution was our first idea as it seems the logical way to do it. However, in the AutoGeneratingColumns event the incoming e.Column is never of type GridViewCheckBoxColumn, it is always a GridViewDataColumn, even for the column whose data type is boolean (non-nullable bit in SQL Server), and the grid always places a checkbox for that column in the grid. (We're using RadControls for WPF Q3 2013.)
0
Hi,
Indeed, you are right. You cannot change the column just changing this.
You will need to apply a converter to convert the Boolean value to a String one.
For example:
Let me know how this works for you.
Regards,
Didie
Telerik
Indeed, you are right. You cannot change the column just changing this.
You will need to apply a converter to convert the Boolean value to a String one.
For example:
private
void
clubsGrid_AutoGeneratingColumn(
object
sender, GridViewAutoGeneratingColumnEventArgs e)
{
var dataColumn = e.Column
as
GridViewDataColumn;
if
(dataColumn.Header.ToString() ==
"IsActive"
)
{
GridViewDataColumn newColumn =
new
GridViewDataColumn();
Binding bb =
new
Binding();
bb.Converter =
new
MyConv();
bb.Path = dataColumn.DataMemberBinding.Path;
newColumn.DataMemberBinding = bb;
newColumn.Header = dataColumn.Header;
newColumn.UniqueName = dataColumn.UniqueName;
e.Column = newColumn;
}
}
Let me know how this works for you.
Regards,
Didie
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0

Phil
Top achievements
Rank 1
answered on 19 Nov 2013, 04:06 PM
That helped indeed. Since the e.Column was already a GridViewDataColumn, I assumed setting it to another of the same type would have no affect, but apparently it does. I tweaked your sample to fit our needs (including our customer converter) and it works fine. Thanks.
Type type = e.ItemPropertyInfo.PropertyType;
// If the type is generic it means it's nullable, so get the underlying value type
if
(type.IsGenericType) type = type.GetProperty(
"Value"
).PropertyType;
// If appropriate, change what would be a checkbox column to a regular text column (for better performance)
if
(type ==
typeof
(
bool
) && Grid.IsReadOnly)
{
e.Column =
new
GridViewDataColumn
{
DataMemberBinding =
new
Binding
{
Source = col.DataMemberBinding.Source,
Path = col.DataMemberBinding.Path,
Converter = _booleanToStringConverter,
ConverterParameter =
"True;False"
},
Header = col.Header,
UniqueName = col.UniqueName,
DataFormatString = col.DataFormatString
};
}
0
Accepted
Hi,
I am glad to hear that.
I can even suggest you this solution, without creating a new instance of a column:
Regards,
Didie
Telerik
I am glad to hear that.
I can even suggest you this solution, without creating a new instance of a column:
private
void
clubsGrid_AutoGeneratingColumn(
object
sender, GridViewAutoGeneratingColumnEventArgs e)
{
var dataColumn = e.Column
as
GridViewDataColumn;
if
(dataColumn.Header.ToString() ==
"IsActive"
)
{
dataColumn.DataMemberBinding =
new
Binding
{
Source = dataColumn.DataMemberBinding.Source,
Path = dataColumn.DataMemberBinding.Path,
Converter =
_booleanToStringConverter,
ConverterParameter =
"True;False"
};
}
}
Regards,
Didie
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
0

Phil
Top achievements
Rank 1
answered on 19 Nov 2013, 04:30 PM
OK. Actually, assigning a new binding is apparently all that's needed.
col.DataMemberBinding = new Binding
{
Source = col.DataMemberBinding.Source,
Path = col.DataMemberBinding.Path,
Converter = _booleanToStringConverter,
ConverterParameter = "True;False"
};
0
Hello,
Indeed.
Regards,
Didie
Telerik
Indeed.
Regards,
Didie
Telerik
TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WPF.
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>
Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
Sign up for Free application insights >>