<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewExpandCollapse.aspx.cs" Inherits="GridViewExpandCollapse" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>Expand/Collapse</title> <script type="text/javascript"> var Grid = null; var UpperBound = 0; var LowerBound = 1; var CollapseImage = 'images/minus.gif'; var ExpandImage = 'images/plus.gif'; var IsExpanded = true; var Rows = null; var n = 1; var TimeSpan = 25; window.onload = function () { Grid = document.getElementById('<%= this.gvTab.ClientID %>'); UpperBound = parseInt('<%= this.gvTab.Rows.Count %>'); Rows = Grid.getElementsByTagName('tr'); } function Toggle(Image) { ToggleImage(Image); ToggleRows(); } function ToggleImage(Image) { if (IsExpanded) { Image.src = ExpandImage; Image.title = 'Expand'; Grid.rules = 'none'; n = LowerBound; IsExpanded = false; } else { Image.src = CollapseImage; Image.title = 'Collapse'; Grid.rules = 'cols'; n = UpperBound; IsExpanded = true; } } function ToggleRows() { if (n < LowerBound || n > UpperBound) return; Rows[n].style.display = Rows[n].style.display == '' ? 'none' : ''; if (IsExpanded) n--; else n++; setTimeout("ToggleRows()", TimeSpan); } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="gvTab" BackColor="WhiteSmoke" runat="server" AutoGenerateColumns="False" GridLines="Vertical" ShowFooter="True"> <Columns> <asp:TemplateField> <HeaderStyle Width="25px" /> <ItemStyle Width="25px" BackColor="White" /> <HeaderTemplate> <asp:Image ID="imgTab" onclick="javascript:Toggle(this);" runat="server" ImageUrl="images/minus.gif" ToolTip="Collapse" /> </HeaderTemplate> </asp:TemplateField> <asp:BoundField HeaderText="n" DataField="n"> <HeaderStyle Width="25px" /> <ItemStyle Width="25px" /> </asp:BoundField> <asp:BoundField HeaderText="sqrt(n)" DataField="sqrtn"> <HeaderStyle Width="150px" /> <ItemStyle Width="150px" /> </asp:BoundField> <asp:BoundField HeaderText="qbrt(n)" DataField="qbrtn"> <HeaderStyle Width="150px" /> <ItemStyle Width="150px" /> </asp:BoundField> </Columns> <HeaderStyle Height="25px" Font-Bold="True" BackColor="DimGray" ForeColor="White" HorizontalAlign="Center" VerticalAlign="Middle" /> <RowStyle Height="25px" BackColor="Gainsboro" HorizontalAlign="Center" VerticalAlign="Middle" /> <AlternatingRowStyle Height="25px" BackColor="LightGray" HorizontalAlign="Center" VerticalAlign="Middle" /> <FooterStyle BackColor="Gray" /> </asp:GridView> </div> </form> </body> </html>
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class GridViewExpandCollapse : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { gvTab.DataSource = GetDataTable(); gvTab.DataBind(); } } protected DataTable GetDataTable() { DataTable dTable = new DataTable(); DataRow dRow = null; Random rnd = new Random(); dTable.Columns.Add("n"); dTable.Columns.Add("qbrtn"); dTable.Columns.Add("sqrtn"); for (int n = 1; n <= 10; ++n) { dRow = dTable.NewRow(); dRow["n"] = n + "."; dRow["qbrtn"] = Math.Pow(n, 1D / 3D) + ""; dRow["sqrtn"] = Math.Sqrt(n) + ""; dTable.Rows.Add(dRow); dTable.AcceptChanges(); } return dTable; } }