In various cases you may want to access grid functional items/columns outside of the grid server event handlers. This is easily attainable with the GetItems(itemType), GetColumn(columnName) and GetColumnSafe(columnName) methods (exposed by each GridTableView instance).
The GetItems(itemType) method returns an array of items (in the respective GridTableView) which match the specified type. You can use the GridItemType enumeration to choose the item type, for example:
| VB.NET |
Copy Code |
|
Dim headerItem As GridItem = RadGrid1.MasterTableView.GetItems(GridItemType.Header)(0)
|
| C# |
Copy Code |
|
GridItem headerItem = RadGrid1.MasterTableView.GetItems(GridItemType.Header)[0]; //cast the item to GridHeaderItem and operate with it further |
The GetColumn(columnName) method returns the column with the unique name specified as argument, namely:
| VB.NET |
Copy Code |
|
Dim column as GridColumn = RadGrid1.MasterTableView.GetColumn("OrderID")
|
| C# |
Copy Code |
|
GridColumn column = RadGrid1.MasterTableView.GetColumn["OrderID"]; //thus you get reference to the column with OrderID unique name |
The GetColumnSafe(columnName) performs the same task as GetColumn(columnName) method, however GetColumnSafe will not raise an exception in case column with that name is not found in the corresponding GridTableView.
The forthcoming sample implementation is made for hierarchical grid with two levels. With separate buttons on the page you can:
- switch the visibility for the inner tables command item link button (only for expanded parent items)
- enable/disable the link button inside the master table command item template
- show/hide the CustomerID column in the main table (calling the GetColumn(columnName) method)
- modify the width for the OrderID column in each detail table (only for expanded parent items)
 |
The new size for the OrderID column will be retained till the next rebind action in the grid |
| ASPX/ASCX |
Copy Code |
|
<asp:LinkButton ID="btnReferenceColumns" runat="server" Text="Operate with columns" /> <br /> <rad:RadGrid ID="RadGrid1" runat="server" EnableAJAX="true" AutoGenerateColumns="False"> <MasterTableView DataKeyNames="CustomerID" Width="100%" CommandItemDisplay="Top"> <CommandItemTemplate> <asp:LinkButton ID="lbMasterInsert" runat="server" CommandName="InitInsert" Text="Insert Customer"></asp:LinkButton> </CommandItemTemplate> <DetailTables> <rad:GridTableView DataKeyNames="OrderID" Width="100%" runat="server" CommandItemDisplay="Top"> <CommandItemTemplate> <asp:LinkButton ID="lbDetailInsert" runat="server" CommandName="InitInsert" Text="Insert Order"></asp:LinkButton> </CommandItemTemplate> <Columns> <rad:GridBoundColumn HeaderText="OrderID" HeaderButtonType="TextButton" DataField="OrderID" UniqueName="OrderID"> </rad:GridBoundColumn> <rad:GridBoundColumn HeaderText="Date Ordered" HeaderButtonType="TextButton" DataField="OrderDate" UniqueName="OrderDate"> </rad:GridBoundColumn> <rad:GridBoundColumn HeaderText="EmployeeID" HeaderButtonType="TextButton" DataField="EmployeeID" UniqueName="EmployeeID"> </rad:GridBoundColumn> </Columns> </rad:GridTableView> </DetailTables> <Columns> <rad:GridBoundColumn HeaderText="CustomerID" HeaderButtonType="TextButton" DataField="CustomerID" UniqueName="CustomerID"> </rad:GridBoundColumn> <rad:GridBoundColumn HeaderText="Contact Name" HeaderButtonType="TextButton" DataField="ContactName" UniqueName="ContactName"> </rad:GridBoundColumn> <rad:GridBoundColumn HeaderText="Company" HeaderButtonType="TextButton" DataField="CompanyName" UniqueName="CompanyName"> </rad:GridBoundColumn> </Columns> </MasterTableView> </rad:RadGrid> <asp:Button ID="btnHideDetailInsert" runat="server" Text="Switch insert option visibility for detail table" /> <br /> <asp:Button ID="btnDisableMasterInsert" runat="server" Text="Disable/Enable insert for master table" /> |
| VB.NET |
Copy Code |
|
Public Shared connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & System.Web.HttpContext.Current.Server.MapPath("~/Grid/Data/Access/Nwind.mdb")
Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.WebControls.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource RadGrid1.DataSource = GetDataTable("SELECT TOP 5 * From Customers") End Sub
Public Shared Function GetDataTable(ByVal query As String) As DataTable Dim connection1 As New OleDbConnection(connectionString) Dim adapter1 As New OleDbDataAdapter adapter1.SelectCommand = New OleDbCommand(query, connection1) Dim table1 As New DataTable connection1.Open() Try adapter1.Fill(table1) Finally connection1.Close() End Try Return table1 End Function Protected Sub RadGrid1_DetailTableDataBind(ByVal source As Object, ByVal e As Telerik.WebControls.GridDetailTableDataBindEventArgs) Handles RadGrid1.DetailTableDataBind Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem) If (Not e.DetailTableView.GetColumnSafe("OrderID") Is Nothing) Then Dim CustomerID As String = dataItem("CustomerID").Text e.DetailTableView.DataSource = GetDataTable("SELECT * FROM Orders WHERE CustomerID = '" & CustomerID & "'") End If End Sub Protected Sub btnHideDetailInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnHideDetailInsert.Click Dim masterItem As GridDataItem For Each masterItem In RadGrid1.MasterTableView.Items If (masterItem.Expanded) Then Dim commandItem As GridCommandItem = masterItem.ChildItem.NestedTableViews(0).GetItems(GridItemType.CommandItem)(0) Dim lnkButton As LinkButton = CType(commandItem.FindControl("lbDetailInsert"), LinkButton) lnkButton.Visible = Not lnkButton.Visible End If Next End Sub Protected Sub btnDisableMasterInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDisableMasterInsert.Click Dim commandItem As GridCommandItem = RadGrid1.MasterTableView.GetItems(GridItemType.CommandItem)(0) Dim lnkButton As LinkButton = CType(commandItem.FindControl("lbMasterInsert"), LinkButton) lnkButton.Enabled = Not lnkButton.Enabled End Sub Protected Sub btnReferenceColumns_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReferenceColumns.Click Dim masterItem As GridDataItem For Each masterItem In RadGrid1.MasterTableView.Items If (masterItem.Expanded) Then Dim detailColumn As GridBoundColumn = CType(masterItem.ChildItem.NestedTableViews(0).GetColumnSafe("OrderID"), GridBoundColumn) detailColumn.HeaderStyle.Width = Unit.Pixel(50) End If Next Dim masterColumn As GridBoundColumn = CType(RadGrid1.MasterTableView.GetColumn("CustomerID"), GridBoundColumn) masterColumn.Visible = Not masterColumn.Visible End Sub |
| C# |
Copy Code |
|
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/Grid/Data/Access/Nwind.mdb"); protected void RadGrid1_NeedDataSource(object source, Telerik.WebControls.GridNeedDataSourceEventArgs e) { RadGrid1.DataSource = GetDataTable("SELECT TOP 5 * From Customers"); } public static DataTable GetDataTable(string query) { OleDbConnection connection1 = new OleDbConnection(connectionString); OleDbDataAdapter adapter1 = new OleDbDataAdapter(); adapter1.SelectCommand = new OleDbCommand(query, connection1); DataTable table1 = new DataTable();
connection1.Open(); try { adapter1.Fill(table1); } finally { connection1.Close(); } return table1; } protected void RadGrid1_DetailTableDataBind(object source, Telerik.WebControls.GridDetailTableDataBindEventArgs e) { GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
if (e.DetailTableView.GetColumnSafe("OrderID") != null) { string CustomerID = dataItem["CustomerID"].Text; e.DetailTableView.DataSource = GetDataTable("SELECT * FROM Orders WHERE CustomerID = \'" + (CustomerID + "\'")); } } protected void btnHideDetailInsert_Click(object sender, System.EventArgs e) { GridDataItem masterItem;
foreach (masterItem in RadGrid1.MasterTableView.Items) { if (masterItem.Expanded) { GridCommandItem commandItem = masterItem.ChildItem.NestedTableViews[0].GetItems(GridItemType.CommandItem)[0]; LinkButton lnkButton = (LinkButton)commandItem.FindControl("lbDetailInsert"); lnkButton.Visible = !lnkButton.Visible; } } } protected void btnDisableMasterInsert_Click(object sender, System.EventArgs e) { GridCommandItem commandItem = RadGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]; LinkButton lnkButton = (LinkButton)commandItem.FindControl("lbMasterInsert"); lnkButton.Enabled = !lnkButton.Enabled; } protected void btnReferenceColumns_Click(object sender, System.EventArgs e) { GridDataItem masterItem;
foreach (masterItem in RadGrid1.MasterTableView.Items) { if (masterItem.Expanded) { GridBoundColumn detailColumn = (GridBoundColumn)masterItem.ChildItem.NestedTableViews[0].GetColumnSafe("OrderID"); detailColumn.HeaderStyle.Width = Unit.Pixel(50); } } GridBoundColumn masterColumn = (GridBoundColumn)RadGrid1.MasterTableView.GetColumn("CustomerID"); masterColumn.Visible = !masterColumn.Visible; } |