<%@ Import Namespace="System.Data" %> <%@ Page Language="C#" AutoEventWireup="false" %> <script language="C#" runat="server"> void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { GridView gv = (GridView)sender; Int32 rowIndex = Convert.ToInt32(e.CommandArgument.ToString()); switch (e.CommandName) { case "Select": TextBox tb = gv.HeaderRow.FindControl("txtHeaderValue") as TextBox; lblHeaderValue.Text = "In the header textbox you entered: " + tb.Text; GridView childgv = (GridView)gv.Rows[rowIndex].FindControl("ChildGridView1"); if (childgv != null) { childgv.Visible = !childgv.Visible; ObjectDataSource odsOrders = (ObjectDataSource)gv.Rows[rowIndex].FindControl("odsOrders"); odsOrders.SelectParameters["CustomerID"].DefaultValue = gv.DataKeys[rowIndex][0].ToString(); DetailsView detV = (DetailsView)gv.Rows[rowIndex].FindControl("detvOrder"); if (detV != null) detV.Visible = childgv.Visible; } break; } } void ChildGridView_RowCommand(object sender, GridViewCommandEventArgs e) { GridView gv = (GridView)sender; Int32 rowIndex = Convert.ToInt32(e.CommandArgument.ToString()); switch (e.CommandName) { case "Select": DetailsView detV = (DetailsView)gv.Parent.FindControl("detvOrder"); if (detV != null) { ObjectDataSource odsOrders = (ObjectDataSource)gv.Parent.FindControl("odsOrderDetails"); odsOrders.SelectParameters["OrderId"].DefaultValue = gv.DataKeys[rowIndex][0].ToString(); } break; } } protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { GridViewRow grvrow = e.Row; Table tbl = new Table(); TableRow row = new TableRow(); TableCell[] aTD = new TableCell[grvrow.Cells.Count]; grvrow.Cells.CopyTo(aTD, 0); grvrow.Cells.Clear(); row.Cells.AddRange(aTD); tbl.Rows.Add(row); //second row row = new TableRow(); TableCell cell = new TableCell(); cell.ColumnSpan = aTD.Length; row.Cells.Add(cell); Label lbl = 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); TextBox tb = 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 TableCell cellGRV = new TableCell(); cellGRV.ColumnSpan = aTD.Length; grvrow.Cells.Add(cellGRV); cellGRV.Controls.Add(tbl); } } protected void ChildGridView1_SelectedIndexChanged(object sender, EventArgs e) { GridView1.SelectedRow.FindControl("detvOrder").Visible = !GridView1.SelectedRow.FindControl("detvOrder").Visible; } </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>
Sunday, 29 April 2012
Bind the data to nested grid view to the main grid view Row command event
Subscribe to:
Post Comments (Atom)
Bind GridView to subobjects
ReplyDelete