?????在模板容器中,放置GridView控件,形成"表中表"的效果,這樣可以實現各種復雜的表格效果,下面介紹的"表中表"最適合顯示主從表中的數據。
???? 新建一個ASp.NET網站,在Default.aspx頁面中添加如下代碼:
<%@ Page Language="C#" AutoEventWireup="true"? CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd](http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd)">
<html xmlns="[http://www.w3.org/1999/xhtml](http://www.w3.org/1999/xhtml)" >
<head runat="server">
?? <title>GridView顯示主從表數據</title>
?? <style type="text/css">
?????? .PlusMouse{cursor:pointer;}
?????? .Show{display:block;}
?????? .Hide{display:none;}
?? </style>
</head>
<body>
?? <form id="form1" runat="server">
?? <div>
?????? <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" ShowHeader="false" OnRowDataBound="GridView1_RowDataBound">
?????????? <Columns>
?????????????? <asp:TemplateField>
?????????????????? <ItemTemplate>
?????????????????????? <div>
?????????????????????????? <asp:ImageButton ID="imgPlus" runat="server" ImageUrl="~/images/plus.gif" CssClass="PlusMouse" />
?????????????????????????? <asp:Label ID="lblName" runat="server" Text=""></asp:Label>
?????????????????????? </div>
?????????????????????? <asp:Panel ID="panelOrder" runat="server" CssClass="Hide" HorizontalAlign="right">
?????????????????????????? <asp:GridView ID="gvOrder" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvOrder_RowDataBound">
?????????????????????????????? <Columns>
?????????????????????????????????? <asp:TemplateField HeaderText="">
?????????????????????????????????????? <ItemTemplate>
?????????????????????????????????????????? <asp:Image ID="imgShipState" runat="server" />
?????????????????????????????????????? </ItemTemplate>
?????????????????????????????????????? <ItemStyle Width="20px" />
?????????????????????????????????? </asp:TemplateField>
?????????????????????????????????? <asp:BoundField DataField="OrderID" HeaderText="訂單ID">
?????????????????????????????????????? <ItemStyle Width="60px" />
?????????????????????????????????? </asp:BoundField>
?????????????????????????????????? <asp:BoundField DataField="CompanyName" HeaderText="顧客公司">
?????????????????????????????????????? <ItemStyle Width="150px" />
?????????????????????????????????? </asp:BoundField>
?????????????????????????????????? <asp:BoundField DataField="OrderDate" DataFormatString="{0:yyyy-MM-dd}" HeaderText="訂貨日期">
?????????????????????????????????????? <ItemStyle Width="150px" />
?????????????????????????????????? </asp:BoundField>
?????????????????????????????????? <asp:BoundField DataField="ProductName" HeaderText="產品名稱">
?????????????????????????????????????? <ItemStyle Width="300" />
?????????????????????????????????? </asp:BoundField>
?????????????????????????????? </Columns>
?????????????????????????? </asp:GridView>
?????????????????????? </asp:Panel>
?????????????????? </ItemTemplate>
?????????????????? <ItemStyle Width="700px" />
?????????????? </asp:TemplateField>
?????????? </Columns>
?????? </asp:GridView>
?? </div>
?? </form>
</body>
</html>
在Default.aspx.cs文件中添加如下代碼:
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;
using System.Data.SqlClient;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
?? private string conString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
?? protected void Page_Load(object sender, EventArgs e)
?? {
?????? BindEmployee();
?? }
?? //獲取一個DataTable
?? private DataTable GetDataTable(string strSQL)
?? {
?????? SqlConnection con = new SqlConnection(conString);
?????? con.Open();
?????? SqlDataAdapter da = new SqlDataAdapter(strSQL,con);
?????? DataTable dt = new DataTable();
?????? da.Fill(dt);
?????? con.Close();
?????? return dt;
?? }
?? private void BindEmployee()
?? {
?????? string strSQL = "select * from Employees";
?????? this.GridView1.DataSource = this.GetDataTable(strSQL);
?????? this.GridView1.DataBind();
?? }
?? private void BindGridOrder(string EmployeeID, GridView gv)
?? {
?????? StringBuilder strSQL = new StringBuilder();
?????? strSQL.Append("select top 5 t1.OrderID,t1.OrderDate,t1.RequiredDate,t1.ShippedDate,t2.CompanyName,t4.ProductName ");
?????? strSQL.Append(" from Orders t1 ");
?????? strSQL.Append(" left join Customers t2 on t1.CustomerID=t2.CustomerID ");
?????? strSQL.Append(" left join [Order Details] t3 on t1.OrderID = t3.OrderID ");
?????? strSQL.Append(" left join Products t4 on t3.ProductID = t4.ProductID ");
?????? strSQL.AppendFormat(" where t1.EmployeeID='{0}'", EmployeeID);
?????? gv.DataSource = this.GetDataTable(strSQL.ToString());
?????? gv.DataBind();
?? }
?? //主表的數據綁定
?? protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
?? {
?????? if (e.Row.RowType != DataControlRowType.DataRow)
?????????? return;
?????? DataRowView drv = (DataRowView)e.Row.DataItem;
?????? Label lblName = (Label)e.Row.FindControl("lblName");
?????? lblName.Text = drv["TitleOfCourtesy"].ToString() + drv["FirstName"].ToString();
?????? string pid = e.Row.FindControl("panelOrder").ClientID;
?????? ImageButton imgPlus = (ImageButton)e.Row.FindControl("imgPlus");
?????? imgPlus.Attributes.Add("bz","0");
?????? imgPlus.OnClientClick = "if(this.bz=='0'){ document.getElementById('"+pid+"').className='Show';this.bz='1';}else{ document.getElementById('"+pid+"').className='Hide';this.bz='0';}return false;";
?????? GridView gv = (GridView)e.Row.FindControl("gvOrder");
?????? this.BindGridOrder(drv["EmployeeID"].ToString(), gv);
?? }
?? //從表的數據綁定
?? protected void gvOrder_RowDataBound(object sender, GridViewRowEventArgs e)
?? {
?????? if (e.Row.RowType != DataControlRowType.DataRow)
?????????? return;
?????? DataRowView drv = (DataRowView)e.Row.DataItem;
?????? DateTime requiredDate = DateTime.Parse(drv["RequiredDate"].ToString());
?????? DateTime shippedDate = requiredDate;
?????? try
?????? {
?????????? shippedDate = DateTime.Parse(drv["ShippedDate"].ToString());
?????? }
?????? catch
?????? {
?????? }
?????? int days = requiredDate.Subtract(shippedDate).Days;
?????? Image imgState = (Image)e.Row.FindControl("imgShipState");
?????? if (days < 10)
?????? {
?????????? imgState.ImageUrl = "./images/1.gif";
?????? }
?????? else if (days < 20)
?????? {
?????????? imgState.ImageUrl = "./images/2.gif";
?????? }
?????? else
?????? {
?????????? imgState.ImageUrl = "./images/3.gif";
?????? }
?? }
??
}
頁面顯示效果如下
:
?????????????????????????????????????????????
- 前言
- asp.net利用GridView&quot;表中表&quot;實現主從表數據
- asp.net TreeView動態綁定數據庫顯示數據
- asp.net圖片驗證碼
- asp.net中利用Lucene.net實現檢索并對檢索關鍵字高亮顯示
- asp.net時間控件之用法
- asp.net 水晶報表使用總結
- asp.net frameset里一個frame中獲取下拉框、單選框的值并作為參數傳遞到另一個frame里并顯示結果
- asp.net中zedgraph柱狀圖的使用總結
- asp.net Repeater控件用法----一列數據在Repeater中每行顯示固定記錄方法
- asp.net 服務器端Label控件字間距調整的一種簡單方案
- asp.net 利用HttpWebRequest自動獲取網頁編碼并獲取網頁源代碼
- asp.net中去除字符串中的所有空格字符
- ASP.NET中數據控件中的LinkButton控件點擊時更換顏色
- asp.net中一個頁面跳轉,后一個頁面操作內容后返回先前頁面,并使得先前頁面數據刷新
- asp.net 使用FileUpload控件上傳并顯示圖片
- asp.net中用于顯示包含html標記的服務器端控件 Literal
- asp.net 鼠標移入Repeater某一行時改變顏色并且checkbox列被選中
- asp.net web數據庫控件內table(包括嵌套table)的邊線問題
- asp.net 實現獲取一個集合數組中出現次數最多的元素
- asp.net DataList控件分頁代碼
- asp.net 操作INI配置文件類
- asp.net 操作Excel表數據導入到SQL Server數據庫
- asp.net jquery ajax數據操作 DropDownList級聯
- asp.net 在線用戶列表統計
- asp.net TreeView動態添加
- asp.net 上傳大文件大小控制方案
- ASP.NET中利用Repeater實現增刪改操作
- ASP.NET中DateTime可空值的設置方法
- ASP.NET &lt;a&gt;&lt;/a&gt;標記href傳遞多個參數
- asp.net DropDownList中內容偽樹狀展示
- aspx頁面中點擊按鈕傳遞給Silverlight,并且頁面不刷新
- asp.net 利用微軟數據訪問類庫結合AjaxPro實現無刷新下拉框級聯
- asp.net 服務器控件LinkButton等在后臺代碼中設置js事件或添加css樣式
- asp.net 長表單填寫水平滾動條滑動效果
- asp.net 之StringBuilder 去除重復數據
- asp.net Repeater等數據控件模版內部2個DropDownList控件級聯
- asp.net 網站暫停訪問之添加一個html文件(app_offline.htm)
- asp.net 解決文件上傳大小的限制
- asp.net RadGrid分頁功能擴展Demo
- asp.net frameset 框架頁面伸縮功能實現
- asp.net 圖片批量上傳預覽,在Silverlight頁面中讀取并滾動顯示
- asp.net IE下div背景圖片100%拉伸填充,可以縮放
- asp.net 根據值不同,在綁定時顯示不同顏色
- asp.net+js方式實現的幻燈圖片效果展示
- asp.net 向Oracle數據庫表的Clob字段中寫入文本編輯器中輸入的大段文字信息
- asp.net 網頁中播放mp4文件,IIS中設置MIME類型
- asp.net加載新浪方式的圖片輪播
- asp.net 在使用母版頁的子頁面cs后臺代碼中控制母版頁中的登錄控件顯示
- asp.net 購物網站倒計時功能
- asp.net Oracle數據庫左側目錄樹及右側數據綁定及分頁
- asp.net 內容頁訪問母版頁中的控件
- asp.net 文件上傳和下載管理源碼
- asp.net Repeater控件內容上下滾動播放
- asp.net 郵件發送提醒功能(接收方包括QQ郵箱等)
- asp.net中分頁控件AspNetPager美化樣式
- asp.net 右下角彈出新提醒信息提示框
- asp.net表單驗證和彈出框artDialog使用分享(資源整合)
- asp.net 2個ListBox之間轉移數據的實現
- asp.net使用echarts展示圖表數據
- asp.net中利用jquery zTree異步加載數據
- asp.net中DataTable和List&lt;T&gt;之間相互轉換
- asp.net中利用NPOI導出數據到excel中
- asp.net中Repeater中嵌套Repeater來顯示跟外層Repeater數據相關的其他信息
- asp.net 利用jquery讓登錄頁面垂直居中顯示
- asp.net 利用多表聯合查詢進行匯總統計
- asp.net 中RadioButtonList的選項改變事件處理(采用jquery操作)
- asp.net 中點擊按鈕彈出模式對話框,選擇值后返回到頁面中(window.showModalDialog實現)
- asp.net GridView列數據鼠標移入顯示提示信息
- asp.net table表格表頭及列固定實現
- asp.net 利用IHttpModule和IRequiresSessionState控制入口登錄開發錯誤解決辦法
- asp.net Web項目中使用Log4Net進行錯誤日志記錄
- asp.net web開發中使用的Web彈窗/層的Layer使用介紹
- asp.net 調用echarts顯示圖表控件隨瀏覽器自適應解決方案
- asp.net開發中利用jquery來實現滾動下拉標題浮動固定顯示
- asp.net web開發中使用JS百度地圖信息彈出窗中顯示echarts圖
- asp.net Repeater拖拽實現排序并同步排序字段到數據庫中
- asp.net中獲取Layer彈出層返回值