RadGrid for ASP.NET

Using the GetItems(itemType), GetColumn(columnName) and GetColumnSafe(columnName) methods Send comments on this topic.
How-to > Using the GetItems(itemType), GetColumn(columnName) and GetColumnSafe(columnName) methods

Glossary Item Box

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)
'cast the item to GridHeaderItem and operate with it further

 

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")
'thus you get reference to the column with OrderID unique name

 

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;
}