I'm curious if it's possible to display the column selector menu via Javascript? I'd like to add button that a user can click and select the column's he wants to view, without me having to explain that he shoudl right-click on the header, and select the columns menu.
Is this possible?
Thanks
John
Is this possible?
Thanks
John
7 Answers, 1 is accepted
0
Richard
Top achievements
Rank 1
answered on 23 Apr 2012, 03:55 PM
John:
Perhaps you should consider a different approach that uses a multi-select RadComboBox or DropList to allow users to select column names, and then, on the click event of a button, set the columns visibility.
Take a look at the Grid/Grid Filtered by Combo online demo. You could populate the combo box with a list of all columns and make it multi-select.
I'd suggest also referencing the Grid/Grid Cell Selection online demo for assistance with this. You can modify the JavaScript associated with the Select/Deselect column buttons at top right in order to set each column's "Visible" property to "True" or "False".
Finally, you can reference the Grid/Column/Row Resize/Reorder online demo which populates two drop down lists of available columns and then uses a button click event to reorder them.
Hope this helps!
Perhaps you should consider a different approach that uses a multi-select RadComboBox or DropList to allow users to select column names, and then, on the click event of a button, set the columns visibility.
Take a look at the Grid/Grid Filtered by Combo online demo. You could populate the combo box with a list of all columns and make it multi-select.
I'd suggest also referencing the Grid/Grid Cell Selection online demo for assistance with this. You can modify the JavaScript associated with the Select/Deselect column buttons at top right in order to set each column's "Visible" property to "True" or "False".
Finally, you can reference the Grid/Column/Row Resize/Reorder online demo which populates two drop down lists of available columns and then uses a button click event to reorder them.
Hope this helps!
0
John
Top achievements
Rank 1
answered on 24 Apr 2012, 10:30 AM
I can see how to do it, just load all the columns, tick the visible one etc. One question, can this (
show/hide of columns) be done via client side javascript?
show/hide of columns) be done via client side javascript?
0
Accepted
Richard
Top achievements
Rank 1
answered on 24 Apr 2012, 03:01 PM
John:
You can reference this forum thread that contains a sample project, provided by Telerik admin, that demonstrates hiding a column using JavaScript: Client-Side Column Hiding & Data-binding
Here's the relevant code:
You can reference this forum thread that contains a sample project, provided by Telerik admin, that demonstrates hiding a column using JavaScript: Client-Side Column Hiding & Data-binding
Here's the relevant code:
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> <!-- function hideColumn() { $find('<%=RadGrid1.ClientID %>').get_masterTableView().hideColumn(3); } --> </script></telerik:RadCodeBlock><!-- content start --><input type="button" value="Hide third column!" onclick="hideColumn()" />0
John
Top achievements
Rank 1
answered on 25 Apr 2012, 02:13 PM
Managed to get it to work using your suggestion. Loaded the columns into a RadListbox (during ColumnCreated event), then on client side I hide / show using JavaScript. Worked like a charm.
Thanks for your help
John
Thanks for your help
John
0
Richard
Top achievements
Rank 1
answered on 25 Apr 2012, 03:10 PM
John:
Glad you were able to accomplish your requirement. If you have a moment, you should post the basics of your solution with code snippets to help others.
Cheers!
Glad you were able to accomplish your requirement. If you have a moment, you should post the basics of your solution with code snippets to help others.
Cheers!
0
John
Top achievements
Rank 1
answered on 25 Apr 2012, 03:22 PM
Ok, here's how did it.
I've placed the RadListbox in a RadToolTip so that the column selection doesn't ruin the main page flow. The tooltip will only be shown once the link/button is clicked.
Then I load the columns during the RadGrid's ColumnCreated event.
I've placed the RadListbox in a RadToolTip so that the column selection doesn't ruin the main page flow. The tooltip will only be shown once the link/button is clicked.
<telerik:RadToolTip runat="server" ID="tipColumnHolder" EnableShadow="true" Position="BottomCenter" RelativeTo="Element" ShowEvent="OnClick" Sticky="true" TargetControlID="TriggerLinkOrButtonControlsID" ShowCallout="true" > <telerik:RadListBox ID="lstColumns" OnClientItemChecked="showHideColumn" runat="server" CheckBoxes="true" EmptyMessage="No Columns" EnableMarkMatches="false" AllowReorder="false" > <HeaderTemplate> <div class="ExportColumnHeader">Select Columns</div> </HeaderTemplate> </telerik:RadListBox> </telerik:RadToolTip>Then I load the columns during the RadGrid's ColumnCreated event.
Then finally the javascript that gets it all to work.PrivateSubgridMain_ColumnCreated(ByValsenderAsObject,ByValeAsTelerik.Web.UI.GridColumnCreatedEventArgs)HandlesgridMain.ColumnCreatedIfNotMe.IsPostBackAndTypeOf(e.Column)IsGridBoundColumnThenDimColItemAsNewRadListBoxItem()ColItem.Value = e.Column.UniqueNameColItem.Text =" "& e.Column.UniqueNameMe.lstColumns.Items.Add(ColItem)EndIfEndSubThat's it. The reason I'm loading columns in the ColumnCreated event is because I'm using auto generated columns and so I won't know the columns until the grid itself is loading. Hope this helps some weary traveller some day. John<script type="text/javascript">functionshowHideColumn(sender, eventArgs) {varitem = eventArgs.get_item();varname = item.get_value();varradGrid = $find('<%=Me.gridMain.ClientID%>');vartable = radGrid.get_masterTableView();varcolumn = table.getColumnByUniqueName(name.trim());varindex = column.get_element().cellIndexif(!item.get_checked())table.hideColumn(index);elsetable.showColumn(index);}</script>
0
Andres
Top achievements
Rank 1
Iron
answered on 26 Feb 2018, 04:58 PM
Thanks a lot, John.
This is exactly what i was looking for.
Also, if you want that your functionality coexists with grid's HeaderContextMenu, you need to check columns visibiity before show tooltip.
<telerik:RadToolTip OnClientBeforeShow="loadColumnsVisibility" />
function loadColumnsVisibility(sender, eventArgs) {
var radList = $find('<%=lstColumns.ClientID %>');
var radGrid = $find('<%=RadGrid1.ClientID %>');
var table = radGrid.get_masterTableView();
for (var i = 0; i < radList.get_items().get_count(); i++) {
var item = radList.getItem(i);
var column = table.getColumnByUniqueName(item.get_value());
item.set_checked(column.get_visible())
}
}
This is exactly what i was looking for.
Also, if you want that your functionality coexists with grid's HeaderContextMenu, you need to check columns visibiity before show tooltip.
<telerik:RadToolTip OnClientBeforeShow="loadColumnsVisibility" />
function loadColumnsVisibility(sender, eventArgs) {
var radList = $find('<%=lstColumns.ClientID %>');
var radGrid = $find('<%=RadGrid1.ClientID %>');
var table = radGrid.get_masterTableView();
for (var i = 0; i < radList.get_items().get_count(); i++) {
var item = radList.getItem(i);
var column = table.getColumnByUniqueName(item.get_value());
item.set_checked(column.get_visible())
}
}