I am trying to get the selected row client side on a grid that has grouping enabled. I have a button in a grid template column that when clicked runs a javascript function that selects the row.
My problem is if the user has the grid grouped by any items then the row selected is always off by the number of items that the grid is grouped by.
For example , if the user has selected to group the grid by 2 items and I click the button on the first row in the grid, then the row index returned is 2 but the actual row selected is the 4th row. Using my code below, the alert returns 2 but the 4th row is changed to yellow.
If I do not have the grid grouped by any items, then the code works fine.
Button
<telerik:GridTemplateColumn UniqueName="gtcEdit" HeaderText="Edit" HeaderStyle-Width="50px" >
<ItemTemplate><telerik:RadButton ID="rbtEdit" runat="server" CommandArgument="edit" ButtonType="StandardButton" AutoPostBack="false" Width="30px" Text="Edit" OnClientClicked="EditRecord" />
</ItemTemplate>
</telerik:GridTemplateColumn>
Below is the JavaScript
function EditRecord(sender, eventArgs) {
var rowIndex = sender.get_element().parentNode.parentNode.rowIndex - 1;
var radGrid = $find('<%=rgvMainGrid.ClientID %>');
var masterTable = radGrid.get_masterTableView();
var selectedRow = masterTable.get_dataItems()[rowIndex];
masterTable.selectItem([rowIndex]);
masterTable.get_dataItems()[rowIndex]._element.style.backgroundColor = "Yellow";
alert('edit ' + rowIndex);
}
How can I adjust for this when the grid is grouped?
Thanks for your help.
Tracy
6 Answers, 1 is accepted
Please try with the below code snippet.
function EditRecord(sender, eventArgs) { alert(sender._element.getAttribute("rowindex")); // Get Row index alert(sender._element.getAttribute("rowkey")); // Get Row DatakeyValue }<MasterTableView DataKeyNames="ID"> <Columns> <telerik:GridTemplateColumn UniqueName="gtcEdit" HeaderText="Edit" HeaderStyle-Width="50px"> <ItemTemplate> <telerik:RadButton ID="rbtEdit" runat="server" CommandArgument="edit" ButtonType="StandardButton" AutoPostBack="false" Width="30px" Text="Edit" OnClientClicked="EditRecord" /> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView>protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e){ dynamic data1 = new[] { new { ID = 1, Name ="Name_1",activity_title="title1"}, new { ID = 2, Name = "Name_2",activity_title="title2"}, new { ID = 3, Name = "Name_1",activity_title="title3"}, new { ID = 4, Name = "Name_4",activity_title="title4"}, new { ID = 5, Name = "Name_1",activity_title="title5"} }; RadGrid1.DataSource = data1;}protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e){ if (e.Item is GridDataItem) { GridDataItem item = e.Item as GridDataItem; RadButton rbtEdit = item.FindControl("rbtEdit") as RadButton; rbtEdit.Attributes.Add("rowindex", item.ItemIndex.ToString()); rbtEdit.Attributes.Add("rowKey", item.GetDataKeyValue("ID").ToString()); }}Thanks,
Jayesh Goyani
Thank you for your response, but this did not solve my issue.
I can get the correct row index, the problem is when the grid is grouped the incorrect row is selected.
For example , if the user has selected to group the grid by 2 items and I click the button on the first row in the grid, then the row index returned is 2 but the actual row selected is the 4th row. Using my code below, the alert returns 2 but the 4th row is changed to yellow.
function EditRecord(sender, eventArgs) {
var rowIndex = sender.get_element().parentNode.parentNode.rowIndex - 1;
var radGrid = $find('<%=rgvMainGrid.ClientID %>');
var masterTable = radGrid.get_masterTableView();
var selectedRow = masterTable.get_dataItems()[rowIndex];
masterTable.selectItem([rowIndex]);
masterTable.get_dataItems()[rowIndex]._element.style.backgroundColor = "Yellow"; ROW 4 is HIGHLIGHTED
alert('edit ' + rowIndex); ROW 2 IS RETURNED
}
Thank You
Tracy
Please try the below code snippet.It shows how to access the index when the columns are grouped.If this doesn't help,please provide your full code.
ASPX:
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnItemDataBound="RadGrid1_ItemDataBound"> <MasterTableView DataKeyNames="OrderID"> <GroupByExpressions> <telerik:GridGroupByExpression> <SelectFields> <telerik:GridGroupByField FieldName="ShipCity" HeaderText="ShipCity" /> </SelectFields> <GroupByFields> <telerik:GridGroupByField FieldName="ShipCity" SortOrder="Descending" /> </GroupByFields> </telerik:GridGroupByExpression> </GroupByExpressions> <Columns> <telerik:GridBoundColumn UniqueName="OrderID" DataField="OrderID" HeaderText="OrderID" /> <telerik:GridBoundColumn DataField="ShipCity" HeaderText="ShipCity" UniqueName="ShipCity" /> <telerik:GridTemplateColumn UniqueName="edit" HeaderText="Edit" > <ItemTemplate> <telerik:RadButton ID="rbtEdit" runat="server" CommandArgument="edit" ButtonType="StandardButton" AutoPostBack="false" Width="30px" Text="Edit" OnClientClicked="EditRecord" /> </ItemTemplate> </telerik:GridTemplateColumn> </Columns> </MasterTableView></telerik:RadGrid>C#:
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridDataItem) { GridDataItem item = e.Item as GridDataItem; RadButton Editbtn = item.FindControl("rbtEdit") as RadButton; Editbtn.Attributes.Add("rowindex", item.ItemIndex.ToString()); } }JS:
<script type="text/javascript"> function EditRecord(sender, eventArgs) { var radGrid = $find('<%=RadGrid1.ClientID %>'); var masterTable = radGrid.get_masterTableView(); alert(sender._element.getAttribute("rowindex")); // Get Row index var row = sender._element.getAttribute("rowindex"); masterTable.get_dataItems()[row]._element.style.backgroundColor = "Yellow"; }</script>Thanks,
Princy
Please try the below code
function EditRecord(sender, eventArgs) {
var rowIndex = sender._element.parentNode.parentNode.rowIndex - 1;
var radGrid = $find('<%=rgvMainGrid.ClientID %>');
var masterTable = radGrid.get_masterTableView();
var selectedRow = masterTable.get_dataItems()[rowIndex];
masterTable.selectItem([rowIndex]);
masterTable.get_dataItems()[rowIndex]._element.style.backgroundColor = "Yellow"
Thank You
Sandy
Posted on Aug 26, 2013
Please try the below code
i have same problem. but i use GridButtonColumn like this:
<telerik:GridButtonColumn ButtonType="ImageButton" ItemStyle-Width="5%" HeaderText="جزئیات" CommandName="Details" ConfirmDialogType="Classic" HeaderStyle-Width="5%" />
my code is client side to read that index.
please help me.
You can use the following approach to select the item when Details command is initiated:
<ClientSettings> <Selecting AllowRowSelect="true" /> <ClientEvents OnCommand="gridCommand" /></ClientSettings>function gridCommand(sender, args) { if (args.get_commandName() == "Details") { args.get_tableView().selectItem(parseInt(args.get_commandArgument())); }}I hope this will prove helpful.
Regards,
Eyup
Telerik
