I am having a problem exposing the detail table in a hierarchy grid for a check\uncheck all with a header checkbox. Does anyone have a working example of independant tables (Master and Detail) check\check all?
| Protected Sub DetailToggleSelectedState(ByVal sender As Object, ByVal e As EventArgs) |
| If (CType(sender, CheckBox)).Checked Then |
| For Each dataItem As GridDataItem In rgProjects.MasterTableView.DetailTables(0).Items |
| CType(dataItem.FindControl("DetailCheckBox"), CheckBox).Checked = True |
| dataItem.Selected = True |
| Next |
| Else |
| For Each dataItem As GridDataItem In rgProjects.MasterTableView.DetailTables(0).Items |
| CType(dataItem.FindControl("DetailCheckBox"), CheckBox).Checked = False |
| dataItem.Selected = False |
| Next |
| End If |
| End Sub |
4 Answers, 1 is accepted
0
Shinu
Top achievements
Rank 2
answered on 17 Oct 2008, 04:14 AM
Hi,
Try using a GridClientSelectColumn in the detail table to achieve the desired scenario.
ASPX:
You can also refer the following demo link
Several tables at a level
Thanks
Shinu
Try using a GridClientSelectColumn in the detail table to achieve the desired scenario.
ASPX:
| <DetailTables> |
| <telerik:GridTableView runat="server" EditMode="InPlace" CommandItemDisplay="Top" Name="Detail1" DataSourceID="SqlDataSource1" > |
| <Columns> |
| <telerik:GridClientSelectColumn></telerik:GridClientSelectColumn> |
| ........... |
| <ClientSettings > |
| <Selecting AllowRowSelect="True" /> |
| </ClientSettings> |
You can also refer the following demo link
Several tables at a level
Thanks
Shinu
0
codispdp
Top achievements
Rank 1
answered on 17 Oct 2008, 03:05 PM
Shinu,
Thanks for you suggestion, it works well. How can I maintain the selections in the child records after expand and collapse postback?
Thanks for you suggestion, it works well. How can I maintain the selections in the child records after expand and collapse postback?
0
Shinu
Top achievements
Rank 2
answered on 20 Oct 2008, 05:25 AM
Hi,
Here is a code library submission which explains how to retain selected state in a Hierarchical Grid on rebind. Go through it and see if it helps.
Retain expanded/selected state in hierarchy on rebind
Thanks
Shinu.
Here is a code library submission which explains how to retain selected state in a Hierarchical Grid on rebind. Go through it and see if it helps.
Retain expanded/selected state in hierarchy on rebind
Thanks
Shinu.
0
codispdp
Top achievements
Rank 1
answered on 20 Oct 2008, 11:26 AM
I have tried your suggestion but it does not work using the DetailTableDataBind event of the RadGrid. Here is what I have so far, a button to conduct a search for that will populate a DataTable for the grid and I am using the DetailTableDataBind to populate the child record. I have also added code to maintain the selected items in the detail table, but when I try to collapse the row it will not and I lose the first child selected for that record.
| <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" > |
| <head runat="server"> |
| <title>Untitled Page</title> |
| </head> |
| <body> |
| <form id="form1" runat="server"> |
| <div> |
| <ajax:ScriptManager ID="ScriptManager1" runat="server" /> |
| <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> |
| <AjaxSettings> |
| <telerik:AjaxSetting AjaxControlID="rgProjects"> |
| <UpdatedControls> |
| <telerik:AjaxUpdatedControl ControlID="rgProjects" /> |
| </UpdatedControls> |
| </telerik:AjaxSetting> |
| </AjaxSettings> |
| </telerik:RadAjaxManager> |
| <table cellspacing="0" cellpadding="3" width="95%" border="0"> |
| <tr> |
| <td> |
| <table cellspacing="0" cellpadding="3" width="95%" border="0"> |
| <tr> |
| <td class="StdText" align="center"> |
| Project Number |
| </td> |
| <td class="StdText" align="center"> |
| Profile Number |
| </td> |
| <td align="center" rowspan="2"> |
| <asp:Button ID="Search_btn" runat="server" Width="120px" Text="Get Record(s)" SkinID="StandardButton" Height="45px" /> |
| </td> |
| </tr> |
| <tr> |
| <td align="center"> |
| <telerik:RadGrid |
| ID="rgProjects" |
| runat="server" |
| Skin="Office2007" |
| Width="95%" |
| CellPadding="1" |
| CellSpacing="0" |
| PageSize="100" |
| AllowPaging="True" |
| AllowSorting="True" |
| ShowStatusBar="true" |
| AllowMultiRowSelection="True" |
| AutoGenerateColumns="False"> |
| <PagerStyle Mode="NumericPages"></PagerStyle> |
| <MasterTableView Width="100%" DataKeyNames="Profile_Num" AllowMultiColumnSorting="True" Name=ProjectProfile> |
| <Columns> |
| <telerik:GridClientSelectColumn Reorderable=true UniqueName="ClientSelectColumnMaster" /> |
| <telerik:GridBoundColumn SortExpression="PROJECT_NUMBER" HeaderText="Project" HeaderButtonType="TextButton" DataField="PROJECT_NUMBER" /> |
| <telerik:GridBoundColumn SortExpression="PROFILE_NUM" HeaderText="Profile" HeaderButtonType="TextButton" DataField="PROFILE_NUM" /> |
| <telerik:GridBoundColumn SortExpression="LOGO" HeaderText="Logo" HeaderButtonType="TextButton" DataField="LOGO" /> |
| <telerik:GridBoundColumn SortExpression="COORDINATOR_NAME" HeaderText="Coord" HeaderButtonType="TextButton" DataField="COORDINATOR_NAME" /> |
| <telerik:GridBoundColumn SortExpression="DESCRIPTION" HeaderText="Profile Description" HeaderButtonType="TextButton" DataField="DESCRIPTION" /> |
| <telerik:GridBoundColumn SortExpression="REGION_DESC" HeaderText="Region" HeaderButtonType="TextButton" DataField="REGION_DESC" /> |
| <telerik:GridBoundColumn SortExpression="CREATOR" HeaderText="Created By" HeaderButtonType="TextButton" DataField="CREATOR" /> |
| </Columns> |
| <DetailTables> |
| <telerik:GridTableView DataKeyNames="TASK_NUMBER" Name="Tasks" Width="100%"> |
| <Columns> |
| <telerik:GridClientSelectColumn Reorderable=true UniqueName="ClientSelectColumnDetail" /> |
| <telerik:GridBoundColumn DataField="TASK_DESCRIPTION_B" HeaderText="Task Description" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="GROUP_ASSIGNED" HeaderText="Grp" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="COMPLETED_FLAG" HeaderText="Cmp" HeaderButtonType="TextButton" /> |
| telerik:GridBoundColumn DataField="USER_COMPLETED" HeaderText="User Completed" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="DATE_COMPLETED" HeaderText="Date Completed" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="ACTIVE_FLAG" HeaderText="Act" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="DATE_ACTIVATED" HeaderText="Date Activated" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="TASK_NUMBER" HeaderText="Task#" HeaderButtonType="TextButton" /> |
| <telerik:GridBoundColumn DataField="DATE_CREATED" HeaderText="Date Created" HeaderButtonType="TextButton" /> |
| </Columns> |
| </telerik:GridTableView> |
| </DetailTables> |
| </MasterTableView> |
| <ClientSettings EnablePostBackOnRowClick="true" > |
| <Selecting AllowRowSelect="true" /> |
| </ClientSettings> |
| </telerik:RadGrid> |
| </td> |
| </tr> |
| </table> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </form> |
| </body> |
| </html> |
| Imports System |
| Imports System.Text |
| Imports Telerik.Web.UI |
| Imports System.Data.OracleClient |
| Partial Class Nala_Maintenance |
| Inherits System.Web.UI.Page |
| Private _ordersExpandedState As Hashtable |
| Private _selectedState As Hashtable |
| Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load |
| Dim i As Integer |
| If Not Page.IsPostBack Then |
| Session("selectedItems") = Nothing |
| txtConnectionString.Text = eworkdev.Utilities.GetRegistryValue("Software\FiservEFT\SIMBBA", "ConnectionString", eworkdev.Utilities.RegistryRoot.LocalMachine) & "User Id=" & Session.Contents("UserID") & ";Password=" & Session.Contents("Password") & ";" |
| End If |
| End Sub |
| Private Sub Search_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Search_btn.Click |
| Session("selectedItems") = Nothing |
| BindMaster() |
| End Sub |
| Sub BindMaster() |
| Dim szFilter As String |
| Dim nWhere As Boolean |
| Dim szOperator As String |
| Dim strOrderBy As String |
| If lblMessage.Visible Then |
| lblMessage.Visible = False |
| End If |
| szFilter = "" |
| strOrderBy = " ORDER BY PROJECT_NUMBER, PROFILE_NUM " |
| If (txtProject_Number.Text <> "") Then |
| nWhere = True |
| szOperator = " = " |
| szFilter = "PROJECT_NUMBER" & szOperator & txtProject_Number.Text |
| End If |
| If (txtProfile_Number.Text <> "") Then |
| If nWhere Then |
| szFilter = szFilter & " AND " |
| Else |
| nWhere = True |
| End If |
| szOperator = " = " |
| szFilter = szFilter & "PROFILE_NUM" & szOperator & txtProfile_Number.Text |
| End If |
| If szFilter = "" Then |
| szFilter = "True" |
| End If |
| ProjectFilterValue = "SELECT PROJECT_NUMBER, PROFILE_NUM, LOGO, COORDINATOR_NAME, " & _ |
| "DESCRIPTION, 'NA' REGION_DESC,CREATOR FROM " & _ |
| "SIMBBA.V_WEB_PROJECT_INFO_V60 WHERE " & szFilter & strOrderBy |
| Dim dataTable As DataTable = GetDataTable(ProjectFilterValue) |
| rgProjects.DataSource = dataTable |
| rgProjects.DataBind() |
| nWhere = False |
| If txtProfile_Number.Text <> "" Then |
| If dataTable.Rows.Count = 1 Then |
| 'Fist column Project_number is in dataTable.Rows.Item(0).Item(0) |
| 'Second column Profile_num is in dataTable.Rows.Item(0).Item(1) |
| Dim intProjectNumber As String = dataTable.Rows.Item(0).Item(0) |
| Dim intProfielNumber As String = dataTable.Rows.Item(0).Item(1) |
| Dim strRecordDetailSQL As String = "SELECT C.PROFILE_COUNT, NVL(A.CLOSED_TASKS,0) CLOSED_TASKS, NVL(B.OPEN_TASKS,0) OPEN_TASKS " & _ |
| " FROM " & _ |
| "(SELECT COUNT(TASK_NUMBER) CLOSED_TASKS " & _ |
| ", PROJECT_NUMBER " & _ |
| ", PROFILE_NUM " & _ |
| "FROM SIMBBA.TASKS " & _ |
| "WHERE PROFILE_NUM = " & intProfielNumber & " " & _ |
| "AND COMPLETED_FLAG='Y' " & _ |
| "GROUP BY PROJECT_NUMBER, PROFILE_NUM) A " & _ |
| ",(SELECT COUNT(TASK_NUMBER) OPEN_TASKS " & _ |
| ", PROJECT_NUMBER " & _ |
| ", PROFILE_NUM " & _ |
| "FROM SIMBBA.TASKS " & _ |
| "WHERE PROFILE_NUM = " & intProfielNumber & " " & _ |
| "AND COMPLETED_FLAG='N' " & _ |
| "GROUP BY PROJECT_NUMBER, PROFILE_NUM) B " & _ |
| ",(SELECT COUNT(PROFILE_NUM) PROFILE_COUNT " & _ |
| ", PROJECT_NUM " & _ |
| "FROM SIMBBA.PROFILES " & _ |
| "WHERE PROJECT_NUM = " & intProjectNumber & " GROUP BY PROJECT_NUM) C " & _ |
| "WHERE C.PROJECT_NUM=A.PROJECT_NUMBER(+) " & _ |
| "AND C.PROJECT_NUM=B.PROJECT_NUMBER(+)" |
| End If |
| Else |
| End If |
| End Sub |
| Public Function GetDataTable(ByVal query As String) As DataTable |
| Dim objConn As New OracleConnection(txtConnectionString.Text) |
| Dim oDA As New OracleDataAdapter |
| oDA.SelectCommand = New OracleCommand(query, objConn) |
| Dim tbl As New DataTable |
| objConn.Open() |
| Try |
| oDA.Fill(tbl) |
| Finally |
| objConn.Close() |
| End Try |
| Return tbl |
| End Function |
| Protected Sub rgProjects_ItemCommand(ByVal source As Object, ByVal e As GridCommandEventArgs) Handles rgProjects.ItemCommand |
| Dim TaskNumber As String = Nothing |
| Dim selectedItems As ArrayList |
| If Session("selectedItems") Is Nothing Then |
| selectedItems = New ArrayList |
| Else |
| selectedItems = CType(Session("selectedItems"), ArrayList) |
| End If |
| If e.CommandName = "RowClick" And e.Item.OwnerTableView.Name = "Tasks" Then |
| selectedItems.Clear() |
| For Each selecteditem As GridDataItem In rgProjects.SelectedItems |
| TaskNumber = selecteditem.OwnerTableView.Items(selecteditem.ItemIndex)("Task_Number").Text |
| selectedItems.Add(TaskNumber) |
| Session("selectedItems") = selectedItems |
| Next |
| End If |
| rgProjects.Controls.Add(New LiteralControl(String.Format("<span style='color:green;font-weight:bolder;'>{0}</span>", e.CommandName.ToString))) |
| End Sub |
| Protected Sub rgProjects_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles rgProjects.PreRender |
| If Not (Session("selectedItems") Is Nothing) Then |
| Dim selectedItems As ArrayList = CType(Session("selectedItems"), ArrayList) |
| Dim stackIndex As Integer |
| For stackIndex = 0 To selectedItems.Count - 1 |
| Dim curItem As String = selectedItems(stackIndex).ToString |
| For Each item As GridItem In rgProjects.Items |
| If TypeOf item Is GridDataItem And item.OwnerTableView.Name = "Tasks" Then |
| Dim dataItem As GridDataItem = CType(item, GridDataItem) |
| If curItem.Equals(item.OwnerTableView.Items(item.ItemIndex)("Task_Number").Text) Then |
| dataItem.Selected = True |
| End If |
| End If |
| Next |
| Next |
| lblSelDataKeys.Text = "Selected Item Count: " & selectedItems.Count & " Stack Index: " & stackIndex |
| End If |
| End Sub |
| Private Sub rgProjects_DetailTableDataBind(ByVal source As Object, ByVal e As GridDetailTableDataBindEventArgs) Handles rgProjects.DetailTableDataBind |
| Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem) |
| Dim nCurrentProfileNum As String = dataItem.GetDataKeyValue("Profile_Num").ToString() |
| e.DetailTableView.DataSource = GetDataTable("SELECT PROJECT_NUMBER, PROFILE_NUM, TASK_NUMBER, " & _ |
| " TASK_DESCRIPTION, TASK_DESCRIPTION_B," & _ |
| " TO_CHAR(DATE_CREATED, 'mm/dd/rr hh24:mi:ss') DATE_CREATED," & _ |
| " GROUP_ASSIGNED, USER_ASSIGNED, COMPLETED_FLAG," & _ |
| " TO_CHAR(DATE_ASSIGNED, 'mm/dd/rr hh24:mi:ss')" & _ |
| " DATE_ASSIGNED, TO_CHAR(DATE_COMPLETED, 'mm/dd/rr hh24:mi:ss') DATE_COMPLETED," & _ |
| " USER_COMPLETED, ACTIVE_FLAG, USER_ASSIGNED_B," & _ |
| " TO_CHAR(DATE_ACTIVATED, 'mm/dd/rr hh24:mi:ss') DATE_ACTIVATED," & _ |
| " PROFILE_COORDINATOR, TASK_TYPE, PROFILE_CODE, " & _ |
| " USER_INTERFACE_DATA, COM_IND " & _ |
| " FROM SIMBBA.V_WEB_PROFILE_TASKS" & _ |
| " WHERE PROFILE_NUM = " & nCurrentProfileNum & " order by task_number") |
| End Sub |
| Public Sub ExecuteOracleCommand(ByVal oExecuteQuery As String) |
| Dim oConnection As New OracleConnection(Session("ConnectionString")) |
| Dim oCommand As New OracleCommand(oExecuteQuery, oConnection) |
| oCommand.Connection.Open() |
| oCommand.ExecuteNonQuery() |
| oConnection.Close() |
| 'Destroy the command object |
| oCommand.Dispose() |
| 'Destroy the connection object |
| oConnection.Dispose() |
| End Sub |
| End Class |