This is a migrated thread and some comments may be shown as answers.

Get Selected DetailTable Client Side

6 Answers 433 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Dave
Top achievements
Rank 1
Dave asked on 18 Nov 2009, 08:08 PM
Maybe someone can help me with this one.  I have a grid for which I am trying to create a pop-up window with RadWindowManager opening a page which will allow entry for certain invoice and billing information that will get written to all selected records.  I want to pass the selected record datakey IDs to the window's page as a query string.  Everything is working great, window opens, see what I want, except for actually getting the selected detail table records.  Below is the the client side script I've cobbled together from several differrent examples:

            function GetSelectedIDs() {                  
                var grid = $find("RadGrid1");  
                var MasterTable = grid.get_masterTableView();  
                  
                var selectedRows = MasterTable.get_selectedItems();  
                var selIDs = new Array(selectedRows.length);  
                for (var i = 0; i < selectedRows.length; i++) {  
                    var row = selectedRows[i];  
                     selIDs[i] = MasterTable.getCellByColumnUniqueName(row, "ID").innerHTML                   
                }  
                var oWnd = radopen("BilledUpdate.aspx?PosIDs=" + selIDs.join(","), "BilledUpdate");  
                oWnd.center();  
                return false;  
            } 

This works great to get selected records in the master table (which I disabled record selecting in the master), but isn't helping at all for the selected detail records.  I am calling the snippet above from a custom command item template button, shown below:

                        <CommandItemTemplate> 
                            <asp:LinkButton ID="cmdBillSelect" runat="server" OnClientClick="GetSelectedIDs();" CommandName="BillSelected"><img style="border:0px;vertical-align:middle;" alt="" src="Images/Edit.gif" /> Bill Selected</asp:LinkButton> 
                            <asp:LinkButton ID="cmdNonBillable" runat="server" CommandName="NonBillable"><img style="border:0px;vertical-align:middle;" alt="" src="Images/Cancel.gif" /> Mark Non-Billable</asp:LinkButton> 
                        </CommandItemTemplate> 

Any suggestions?  Thanks.

6 Answers, 1 is accepted

Sort by
0
Accepted
Princy
Top achievements
Rank 2
answered on 19 Nov 2009, 09:15 AM
Hello Sam,

Try out the following code and see if it helps meet your requirement:
c#:
function  GetSelectedIDs() 
 { 
  
                var grid = $find("RadGrid1");   
                var MasterTable = grid.get_masterTableView();   
                   
                var selectedRows = MasterTable.get_selectedItems();                  
                var selIDs = new Array(selectedRows.length);   
                for (var i = 0; i < selectedRows.length; i++) {   
                    var row = selectedRows[i];   
                     selIDs[i] = MasterTable.getCellByColumnUniqueName(row, "ID").innerHTML                    
                }   
                 
                for (var j = 0; j < grid.get_detailTables().length; j++) 
                { 
                     var childSelectedRows = grid.get_detailTables()[j].get_selectedItems(); 
                                  
                }   
                     var childSelIDs = new Array(childSelectedRows.length);   
                    for (var i = 0; i < childSelectedRows.length; i++) 
                     {   
                        var row = childSelectedRows[i];   
                         childSelIDs[i] = grid.get_detailTables()[0].getCellByColumnUniqueName(row, "ID").innerHTML       
                     } 
               
               // .... 
 } 
              

Thanks
Princy.
0
Dave
Top achievements
Rank 1
answered on 19 Nov 2009, 11:43 AM
Thanks Princy!  This worked like a champ and I was able to shorten it up since I don't allow master rows to be selected.
0
Benny
Top achievements
Rank 1
answered on 19 May 2010, 11:12 AM
Normally I used this code when using a grid without detail tables to get the clicked row:
if (grid != null) { 
                var table = grid.get_masterTableView(); 
                var selectedRow = table.get_dataItems()[args.get_itemIndexHierarchical()]; 
 
                if (selectedRow != null) { 
                    var selectedUser = table.getCellByColumnUniqueName(selectedRow, "columnName"); 
 
                    if (selectedUser != null) { 
                        window.location = "Page.aspx?id=" + selectedUser.innerHTML
                    } 
                } 
            } 

But when I'm using detail tables (self-referencing hierarchy) and can't get this to work.
The args.get_itemIndexHierarchical() is something like 0:0_0 (first detail table, first row in the detail table).

What's to cleanest solution to get the clicked row in the detail tables?

Kinds regards.
0
Tommy
Top achievements
Rank 1
answered on 16 Jul 2013, 02:01 PM
Did somebody found something for this? I would need the same thing.  My code looks like this, but it does not work for detail table.

function OnRowClickOrdonnance(sender, eventArgs) {
            var editedRow = eventArgs.get_itemIndexHierarchical();
            var masterTable = sender.get_masterTableView();
            var detailTable = sender.get_detailTables()[0];
            if ((masterTable.get_editItems().length != 0) && (masterTable.get_editItems()[0].get_itemIndexHierarchical() == editedRow)) {
                masterTable.cancelAll();
            }
            else if ((detailTable != undefined) && (detailTable.get_editItems().length != 0) && (detailTable.get_editItems()[0].get_itemIndexHierarchical() == editedRow)) {
                detailTable.cancelAll();
            }
            else if ((masterTable.get_dataItems()[editedRow] != undefined) && (masterTable.get_dataItems()[editedRow].getDataKeyValue('Numero') != 'MULTI')) {
                masterTable.editItem(editedRow);
            } else if ((detailTable != undefined) && (detailTable.get_dataItems()[editedRow] != undefined)) {
                detailTable.editItem(editedRow);
            }
}
0
Kostadin
Telerik team
answered on 19 Jul 2013, 07:55 AM
Hello Tommy,

Please try using the following approach.
<script type="text/javascript">
            function OnRowClickOrdonnance(sender, eventArgs) {
                var editedRow = eventArgs.get_itemIndexHierarchical();
                var masterTable = sender.get_masterTableView();
                var detailTable = sender.get_detailTables()[0];
                if ((masterTable.get_editItems().length != 0) && (masterTable.get_editItems()[0].get_itemIndexHierarchical() == editedRow)) {
                    masterTable.cancelAll();
                }
                else if ((detailTable != undefined) && (detailTable.get_editItems().length != 0) && (detailTable.get_editItems()[0].get_itemIndexHierarchical() == editedRow)) {
                    detailTable.cancelAll();
                }
                else if ((masterTable.get_dataItems()[editedRow] != undefined) && (masterTable.get_dataItems()[editedRow].getDataKeyValue('Numero') != 'MULTI')) {
                    masterTable.editItem(editedRow);
                } else if ((detailTable != undefined) && (detailTable.get_dataItems()[editedRow.split('_')[1]] != undefined)) {
                    detailTable.editItem(parseInt(editedRow.split('_')[1]));
                }
            }
 
        </script>


Regards,
Kostadin
Telerik
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to the blog feed now.
0
Tommy
Top achievements
Rank 1
answered on 19 Jul 2013, 07:16 PM
It worked great.

Thanks! 

Tommy
Tags
Grid
Asked by
Dave
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Dave
Top achievements
Rank 1
Benny
Top achievements
Rank 1
Tommy
Top achievements
Rank 1
Kostadin
Telerik team
Share this question
or