<telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" Width="800px"
OnNeedDataSource="RadGrid1_NeedDataSource" OnItemCommand="RadGrid1_ItemCommand"
OnDetailTableDataBind="RadGrid1_DetailTableDataBind">
<MasterTableView Name="Orders" AutoGenerateColumns="False" DataKeyNames="OrderID">
<Columns>
<telerik:GridNumericColumn DataField="OrderID" DataType="System.Int32"
FilterControlAltText="Filter OrderID column" HeaderText="OrderID"
ReadOnly="True" SortExpression="OrderID" UniqueName="OrderID">
</telerik:GridNumericColumn>
<telerik:GridDateTimeColumn DataField="OrderDate" DataType="System.DateTime"
FilterControlAltText="Filter OrderDate column" HeaderText="OrderDate"
SortExpression="OrderDate" UniqueName="OrderDate">
</telerik:GridDateTimeColumn>
<telerik:GridNumericColumn DataField="Freight" DataType="System.Decimal"
FilterControlAltText="Filter Freight column" HeaderText="Freight"
SortExpression="Freight" UniqueName="Freight">
</telerik:GridNumericColumn>
<telerik:GridBoundColumn DataField="ShipName"
FilterControlAltText="Filter ShipName column" HeaderText="ShipName"
SortExpression="ShipName" UniqueName="ShipName">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ShipCountry"
FilterControlAltText="Filter ShipCountry column" HeaderText="ShipCountry"
SortExpression="ShipCountry" UniqueName="ShipCountry">
</telerik:GridBoundColumn>
</Columns>
<DetailItemTemplate>
<telerik:RadButton runat="server" ID="RadButton1" Text="Click me" CommandName="CustomCommand" AutoPostBack="true" />
</DetailItemTemplate>
<DetailTables>
<telerik:GridTableView Name="OrderDetails" AutoGenerateColumns="false">
<Columns>
<telerik:GridNumericColumn DataField="OrderID" DataType="System.Int32"
FilterControlAltText="Filter OrderID column" HeaderText="OrderID"
ReadOnly="True" SortExpression="OrderID" UniqueName="OrderID">
</telerik:GridNumericColumn>
<telerik:GridNumericColumn DataField="UnitPrice" DataType="System.Decimal"
FilterControlAltText="Filter UnitPrice column" HeaderText="UnitPrice"
SortExpression="UnitPrice" UniqueName="UnitPrice">
</telerik:GridNumericColumn>
<telerik:GridNumericColumn DataField="Quantity" DataType="System.Int32"
FilterControlAltText="Filter Quantity column" HeaderText="Quantity"
SortExpression="Quantity" UniqueName="Quantity">
</telerik:GridNumericColumn>
<telerik:GridNumericColumn DataField="Discount" DataType="System.Decimal"
FilterControlAltText="Filter Discount column" HeaderText="Discount"
SortExpression="Discount" UniqueName="Discount">
</telerik:GridNumericColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
</MasterTableView>
</telerik:RadGrid>
Protected Sub RadGrid1_ItemCommand(ByVal sender As Object, ByVal e As GridCommandEventArgs)
If e.CommandName = "CustomCommand" Then
'Do something This will trigger after the custom button has been clicked
End If
End Sub
Protected Sub RadGrid1_NeedDataSource(ByVal sender As Object, ByVal e As GridNeedDataSourceEventArgs)
CType(sender, RadGrid).DataSource = OrdersTable()
End Sub
Protected Sub RadGrid1_DetailTableDataBind(ByVal sender As Object, ByVal e As GridDetailTableDataBindEventArgs)
If e.DetailTableView.Name = "OrderDetails" Then
Dim parentItem As GridDataItem = e.DetailTableView.ParentItem
Dim orderId As Integer = CInt(parentItem.GetDataKeyValue("OrderID")) 'You need to reference the DataKeyValue in the MasterTableView and get it like this
e.DetailTableView.DataSource = OrderDetailsTable().[Select](String.Format("OrderID = '{0}'", orderId))
End If
End Sub
Private Function OrdersTable() As DataTable
Dim dt As DataTable = New DataTable()
dt.Columns.Add(New DataColumn("OrderID", GetType(Integer)))
dt.Columns.Add(New DataColumn("OrderDate", GetType(DateTime)))
dt.Columns.Add(New DataColumn("Freight", GetType(Double)))
dt.Columns.Add(New DataColumn("ShipName", GetType(String)))
dt.Columns.Add(New DataColumn("ShipCountry", GetType(String)))
dt.PrimaryKey = New DataColumn() {dt.Columns("OrderID")}
For i As Integer = 0 To 100 - 1
Dim index As Integer = i + 1
Dim row As DataRow = dt.NewRow()
row("OrderID") = index
row("OrderDate") = DateTime.Now.Date.AddDays(index)
row("Freight") = index * 0.01
row("ShipName") = "Name " & index
row("ShipCountry") = "Country " & index
dt.Rows.Add(row)
Next
Return dt
End Function
Private Function OrderDetailsTable() As DataTable
Dim dt As DataTable = New DataTable()
dt.Columns.Add(New DataColumn("OrderID", GetType(Integer)))
dt.Columns.Add(New DataColumn("UnitPrice", GetType(Decimal)))
dt.Columns.Add(New DataColumn("Quantity", GetType(Integer)))
dt.Columns.Add(New DataColumn("Discount", GetType(Decimal)))
Dim orders = OrdersTable()
Dim itemsPerOrder As Integer = 4
For rowIndex As Integer = 0 To orders.Rows.Count - 1
Dim currentOrder As DataRow = orders.Rows(rowIndex)
For j As Integer = 0 To itemsPerOrder - 1
Dim index As Integer = j + 1
Dim row As DataRow = dt.NewRow()
row("OrderID") = currentOrder("OrderID")
row("UnitPrice") = index
row("Quantity") = index
row("Discount") = index * 0.01
dt.Rows.Add(row)
Next
Next
Return dt
End Function