ASP.net技巧:DataList、Gridview主從表明細顯示

圖1.使用DataList顯示主從表明細 
圖2.使用Gridview顯示主從表明細
 
數據庫爲SQL Server實例數據庫Northwind,實現按照訂單編號,統計顯示出訂單詳情。
          一構建Northwind庫中Orders訂單表以及Order Details訂單詳細表在DataSet中的表關係:
public class DataAccess
{
    public DataSet Tablerelation()
        {
                string strCon = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
                
                //構建連接
                SqlConnection con = new SqlConnection(strCon);
            
                //多個表來源於相同數據庫我們可以講sql語句一起書寫,但需要注意的是,必須在語句間用空格隔開
                SqlDataAdapter da = new SqlDataAdapter("select    * from orders    select * from [order details]",con);
                DataSet ds = new DataSet();
                da.Fill(ds);

                //我們也可以修改默認生成的(Table、Table1、……)表名
                ds.Tables [0].TableName="orders";
                ds.Tables[1].TableName = "orderDetails";

                //找到兩個表中相關聯的列
                DataColumn father = ds.Tables["orders"].Columns["OrderID"];
                DataColumn son = ds.Tables["orderDetails"].Columns["OrderID"];

                //給兩個列,建立名爲tablerelation的關係
                DataRelation r = new DataRelation("tablerelation", father, son);

                //將表關係添加到數據集中
                ds.Relations.Add(r);
                return ds;
        }
}
wef.config中的連接字符串爲:
<connectionStrings>
  <add name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/>
  </connectionStrings>
接下來我們來佈置控件的界面:
一DataList:
    給DataList1的項中添加一個一行二列的表,第一個單元格中綁定訂單編號,第二個單元格中再加入一個DataList2作爲此訂單編號的訂單詳細,在DataList2的項中添加一個一行四列的表,單元格中綁定訂單詳細表中的字段名。給DataList1的頭模版中加入一個一行五列的表,分別寫入圖片所示的列說明,佈局源碼如下:
    <asp:DataList ID="DataList1" runat="server" BackColor="White"    
                        BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"    
                        GridLines="Both">
                        <ItemStyle ForeColor="#000066" />
                        <SelectedItemStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
                        <HeaderTemplate>
                                <table class="style1" >
                                        <tr>
                                                <td width="70">
                                                        訂單編號</td>
                                                <td width="70">
                                                        商品編號</td>
                                                <td width="70">
                                                        單價</td>
                                                <td width="70">
                                                        數量</td>
                                                <td width="70">
                                                        折扣</td>
                                        </tr>
                                </table>
                        </HeaderTemplate>
                        <FooterStyle BackColor="White" ForeColor="#000066" />
                        <ItemTemplate>
                                <table class="style1">
                                        <tr>
                                                <td width="70">
                                                        <%#Eval("OrderID") %></td>
                                                <td>
                                                        <asp:DataList ID="DataList2" runat="server"    
                                                                DataSource ='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("tablerelation") %>'    
                                                                Width ="100%" BackColor="White" BorderColor="#CC9966" BorderStyle="None"    
                                                                BorderWidth="1px" CellPadding="4" GridLines="Both">
                                                                <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
                                                                <ItemTemplate>
                                                                        <table class="style1">
                                                                                <tr>
                                                                                        <td width="70">
                                                                                             <%#Eval("productID") %></td>
                                                                                        <td width="70">
                                                                                             <%#Eval("Unitprice") %></td>
                                                                                        <td width="70">
                                                                                                 <%#Eval("Quantity") %></td>
                                                                                        <td width="70">
                                                                                             <%#Eval("Discount") %></td>
                                                                                </tr>
                                                                        </table>
                                                                </ItemTemplate>
                                                                <ItemStyle BackColor="White" ForeColor="#330099" />
                                                                <SelectedItemStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
                                                                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
                                                        </asp:DataList>
                                                </td>
                                        </tr>
                                </table>
                        </ItemTemplate>
                        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
                </asp:DataList>
    其中用黃色背景加粗顯示的爲DataList2的數據源將是根據該項中的訂單編號,在表關係名“tablerelation”中找到對應的訂單詳情,創建一個視圖。
     DataList1的數據源將綁定我們以及構建好的DataSet,代碼如下:
    protected void Page_Load(object sender, EventArgs e)
        {
                if (!IsPostBack)
                {
                    
                        Bind();
                }
        }
        //綁定控件顯示
        void Bind()
        {
                DataAccess da = new DataAccess();
                DataSet ds = da.Tablerelation();
                DataList1.DataSource = ds.Tables[0];
                DataList1.DataBind();

                GridView2.DataSource = ds.Tables[0];
                GridView2.DataBind();
        }
二、使用Gridview的方式類似,首先將Gridview2的自動生成列AutoGenerateColumns="False"改爲false,然後在Gridview2手動加入自定義項TemplateField中編輯模版,加入二行一列的表格,第一行綁定訂單編號,第二行加入Gridview3,用於顯示訂單明細,自動生成列AutoGenerateColumns="False"改爲false,加入自定義綁定的四個項目,如 <asp:BoundField DataField="productID" HeaderText="商品編號" />,源碼如下:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"    
                        CellPadding="4" ForeColor="#333333" GridLines="None" >
                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                        <Columns>
                                <asp:TemplateField>
                                        <ItemTemplate>
                                                <table class="style1">
                                                        <tr>
                                                                <td>
                                                                     訂單編號:    <%#Eval("OrderID") %></td>
                                                        </tr>
                                                        <tr>
                                                                <td>
                                                                        <asp:GridView ID="GridView3" runat="server"     DataSource ='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("order") %>' DataMember="orderID" AutoGenerateColumns="False">
                                                                         <Columns>
                                                                            
                                                                                <asp:BoundField DataField="productID" HeaderText="商品編號" />
                                                                                                <asp:BoundField DataField="Unitprice" HeaderText="商品單價" />
                                                                                                <asp:BoundField DataField="Quantity" HeaderText="商品數量" />
                                                                                                <asp:BoundField DataField="Discount" HeaderText="折扣" />
                                                                                
                                                                                </Columns>
                                                                                
                                                                        </asp:GridView>
                                                                        
                                                                </td>
                                                        </tr>
                                                </table>
                                        </ItemTemplate>
                                </asp:TemplateField>
                        </Columns>
                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
                        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                        <EditRowStyle BackColor="#999999" />
                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                </asp:GridView>
Gridview3的數據源的綁定方式如上原理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章