WEBSWAPP Silverlight ASP.NET 3.5 ASP.NET 2.0 ASP.NET 1.0
Cascading Lists
ITemplate
DDL in GridView
G/V MultiSelect
Nested GridViews
RegExp
DataGrid Reorder
Events fire twice
Hyperlink Field
TextBox
UpdateParameters
MultiView
TreeView
C#-Nested GridViews VB-GridView
    
<%@ Import Namespace="System.Data" %> <%@ Page Language="vb" AutoEventWireup="false" %> <script language="vb" runat="server"> Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Dim gv As GridView = DirectCast(sender, GridView) Dim rowIndex As Integer = e.CommandArgument Select Case e.CommandName Case "Select" Dim tb As TextBox = Ctype(gv.HeaderRow.FindControl("txtHeaderValue"), TextBox) lblHeaderValue.Text = "In the header textbox you entered: " & tb.Text Dim childgv As GridView = DirectCast(gv.Rows(rowIndex).FindControl("ChildGridView1"), GridView) If Not childgv Is Nothing Then childgv.Visible = Not childgv.Visible Dim odsOrders As ObjectDataSource = DirectCast(gv.Rows(rowIndex).FindControl("odsOrders"), ObjectDataSource) odsOrders.SelectParameters("CustomerID").DefaultValue = gv.DataKeys(rowIndex)(0).ToString Dim detV As DetailsView = DirectCast(gv.Rows(rowIndex).FindControl("detvOrder"), DetailsView) If Not detV Is Nothing Then detV.Visible = childgv.Visible End If End Select End Sub Protected Sub ChildGridView_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Dim gv As GridView = DirectCast(sender, GridView) Dim rowIndex As Integer = e.CommandArgument Select Case e.CommandName Case "Select" Dim detv As DetailsView = DirectCast(gv.Parent.FindControl("detvOrder"), DetailsView) If Not detv Is Nothing Then Dim odsOrders As ObjectDataSource = DirectCast(gv.Parent.FindControl("odsOrderDetails"), ObjectDataSource) odsOrders.SelectParameters("OrderID").DefaultValue = gv.DataKeys(rowIndex)(0).ToString End If End Select End Sub Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.Header Then Dim grvrow As GridViewRow = e.Row Dim tbl As Table = New Table() Dim row As TableRow = New TableRow() Dim aTD(grvrow.Cells.Count - 1) As TableCell grvrow.Cells.CopyTo(aTD, 0) grvrow.Cells.Clear() row.Cells.AddRange(aTD) tbl.Rows.Add(row) 'second row row = New TableRow() Dim cell As TableCell = New TableCell() cell.ColumnSpan = aTD.Length row.Cells.Add(cell) Dim lbl As new Label() lbl.Text = "This section contains a new header line that was added while handling the RowCreated event to manipulate the header row." & _ " Enter a value in this textbox then I will grab it and display while handling the select command" cell.Controls.Add(lbl) Dim tb as new TextBox() tb.Text = "Enter a value" tb.ID = "txtHeaderValue" cell.Controls.Add(tb) tbl.Rows.Add(row) 'create a new cell within the gridview row Dim cellGRV As TableCell = New TableCell() cellGRV.ColumnSpan = aTD.Length grvrow.Cells.Add(cellGRV) cellGRV.Controls.Add(tbl) End If End Sub Protected Sub ChildGridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) GridView1.SelectedRow.FindControl("detvOrder").Visible = Not GridView1.SelectedRow.FindControl("detvOrder").Visible End Sub </script> <asp:Content ID="Content1" runat="server" ContentPlaceHolderID="MainContent"> <div style="width: 750px;"> <h2> Parent-Child GridViews using show/hide rows within the same table</h2> <p> Click on the arrow icon in front of a record to toggle the view between detail and summary.</p> <asp:Label id="lblHeaderValue" runat="Server"></asp:Label> <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="False" OnRowCommand ="GridView1_RowCommand" DataKeyNames="CustomerID" DataSourceID="odsCustomers" AutoGenerateColumns="false" CssClass="NestedGridView1Style" OnRowCreated ="GridView1_RowCreated"> <SelectedRowStyle CssClass="Green" /> <HeaderStyle CssClass="Pink" /> <Columns> <asp:ButtonField ButtonType="Image" ImageUrl="~/App_Themes/WEBSWAPP/images/arrow.gif" CommandName="Select" Text="Click here to toggle the display of the orders list for this customer" /> <asp:TemplateField> <HeaderTemplate> <table cellpadding="2" cellspacing="0" border="0" width="860px"> <!-- this row has the parent grid --> <tr> <td width="660px"> Company Name</td> <td width="100px"> City</td> <td width="100px"> Country</td> </tr> </table> </HeaderTemplate> <ItemTemplate> <table border="0" cellpadding="2" cellspacing="0" width="860px"> <!-- this row has the parent grid --> <tr> <td width="660px"> <asp:Label ID="lblCompanyName" runat="server" Text='<%# Eval("CompanyName") %>'></asp:Label> </td> <td width="100px"> <asp:Label ID="lblCity" runat="server" Text='<%# Eval("City") %>'></asp:Label> </td> <td width="100px"> <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>'></asp:Label> </td> </tr> <!-- this row has the child grid and its details view--> <tr> <td colspan="3"> <table border="0" cellpadding="3" cellspacing="0" width="100%"> <tr> <!-- this cell has the list of orders for the selected customer --> <td> <asp:GridView ID="ChildGridView1" runat="server" DataKeyNames="OrderID" Visible="False" DataSourceID="odsOrders" AutoGenerateColumns="False" CssClass="GridView1ChildStyle" OnRowCommand="ChildGridView_RowCommand"> <SelectedRowStyle CssClass="Blue" /> <HeaderStyle CssClass="Header" /> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:TemplateField HeaderText="Order Date"> <EditItemTemplate> <asp:TextBox ID="txtOrderDate" runat="server" Text='<%# Bind("OrderDate", "{0:d}") %>' Width="70px"></asp:TextBox> <asp:CompareValidator ID="valComp1" ValueToCompare="01/01/2020" ControlToValidate="txtOrderDate" Operator="LessThan" Type="Date" runat="server" Display="None" ErrorMessage="A valid date must be before January 01 2020" /> <asp:CompareValidator ID="valComp2" ValueToCompare="01/01/1980" ControlToValidate="txtOrderDate" Operator="GreaterThan" Type="Date" runat="server" Display="None" ErrorMessage="Invalid Date: A valid date must be after January 01 1980" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("OrderDate", "{0:d}") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Shipped Date"> <EditItemTemplate> <asp:TextBox ID="txtShippedDate" runat="server" Text='<%# Bind("ShippedDate", "{0:d}") %>' Width="70px"></asp:TextBox> <asp:CompareValidator ID="valComp3" ValueToCompare="01/01/2020" ControlToValidate="txtShippedDate" Operator="LessThan" Type="Date" runat="server" Display="None" ErrorMessage="A valid date must be before January 01 2020" /> <asp:CompareValidator ID="valComp4" ValueToCompare="01/01/1980" ControlToValidate="txtShippedDate" Operator="GreaterThan" Type="Date" runat="server" Display="None" ErrorMessage="Invalid Date: A valid date must be after January 01 1980" /> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label2" runat="server" Text='<%# Eval("ShippedDate", "{0:d}") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ship Name"> <EditItemTemplate> <asp:TextBox ID="txtShipName" runat="server" Text='<%# Bind("ShipName") %>' Width="150px" MaxLength="35"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label4" runat="server" Text='<%# Bind("ShipName") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Freight"> <EditItemTemplate> <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Freight", "{0:c}") %>' Width="70px"></asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label3" runat="server" Text='<%# Bind("Freight", "{0:c}") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:ButtonField ButtonType="Image" ImageUrl="~/App_Themes/WEBSWAPP/images/arrow.gif" CommandName="Select" Text="Click here to toggle the display of the detailed products on this order" /> </Columns> </asp:GridView> </td> <!--This cell has the order detail --> <td> <asp:DetailsView ID="detvOrder" runat="server" DataSourceID="odsOrderDetails" AllowPaging="True" DataKeyNames="OrderID,ProductID" AutoGenerateRows="false" > <FieldHeaderStyle CssClass="DetailsView1Header" /> <HeaderStyle CssClass="Header" /> <HeaderTemplate> <p> Order Details</p> </HeaderTemplate> <Fields> <asp:BoundField HeaderText="Order ID" DataField ="OrderID"/> <asp:BoundField DataField="ProductName" HeaderText="Product Name" /> <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" DataFormatString="{0:c}" HtmlEncode="False" /> <asp:BoundField DataField="Quantity" HeaderText="Quantity" DataFormatString="{0:#}" HtmlEncode="False" /> <asp:BoundField DataField="Discount" HeaderText="Discount" DataFormatString="{0:c}" HtmlEncode="False" /> <asp:BoundField DataField="ExtendedPrice" HeaderText="Extended Price" DataFormatString="{0:c}" HtmlEncode="False" /> <asp:CommandField ShowInsertButton ="true" /> </Fields> </asp:DetailsView> </td> </tr> </table> <asp:ObjectDataSource ID="odsOrderDetails" runat="server" SelectMethod="CustomerOrderDetails" TypeName="WEBSWAPP_BLL.Demos"> <SelectParameters> <asp:Parameter Name="OrderId" DefaultValue="0" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> <asp:ObjectDataSource ID="odsOrders" runat="server" SelectMethod="OrdersForCustomer" TypeName="WEBSWAPP_BLL.Demos" OldValuesParameterFormatString="original_{0}" UpdateMethod="UpdateOrder"> <SelectParameters> <asp:Parameter Name="CustomerID" DefaultValue="0" Type="string" /> </SelectParameters> <UpdateParameters> <asp:Parameter Name="OrderID" Type="Int32" /> <asp:Parameter Name="OrderDate" Type="DateTime" /> <asp:Parameter Name="ShippedDate" Type="DateTime" /> <asp:Parameter Name="ShipName" Type="String" /> <asp:Parameter Name="Freight" Type="String" /> </UpdateParameters> </asp:ObjectDataSource> </td> </tr> </table> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:ObjectDataSource ID="odsCustomers" runat="server" SelectMethod="Customers" TypeName="WEBSWAPP_BLL.Demos"> </asp:ObjectDataSource> <asp:Label ID="lblStatus" runat="server"></asp:Label> </div> </asp:Content>