這裡是文章備份,原文請看我的網站----  http://www.dotblogs.com.tw/mis2000lab/

 

[習題]DataBinding?資料繫結?資料綁定? #6 -- 傷腦筋的 GridView加總、小計

http://www.dotblogs.com.tw/mis2000lab/archive/2010/10/12/databinding_6_gridview_rowdatabound.aspx

 

 

之前有兩個範例,頗為有趣:

文章一:  DataBinding?資料繫結?資料綁定? #4--繫結運算式原來可以這樣用?(DataSet / DataReader)

文章二:  [習題]GridView樣版內部,改用CheckBox/Radio/DropDownList(單/複選)控制項,取代TextBox

      (這篇文章有三種解法,我使用第三種方法來作。)

 


=========================================================================================

我把這兩個範例混合起來,發現一件怪事。

本範例可以放在「下集 / ASP.NET專題實務 II -- 範例集與 4.0新功能」

      的 第六章 作為補充習題!

 




Q:我想要用 DataBinding Expression(資料細節運算式),如同上面的文章一。
        來撰寫 GridView的「加總」功能。
        下圖是學生資料,我要增加一個新的「總分」欄位放在最後。

       

這是一個很簡單的功能,有很多方法可以完成。

      您不一定要依照我的方法來作,至少有三種方法可以做出相同結果。

 

正確運作的結果應該類似(圖一):

     

 


但我剛好上課講解到DataBinding Expression(資料細節運算式)
所以想用類似的方法做出來。

融合上面兩篇文章的技巧,寫出來的成果竟然會是這樣?!(請看下面,圖二)
讓我大吃一驚!!!

     

 

錯誤的狀況 --

1). 使用上面「文章一」的技巧來作,後置程式碼的「公用變數搭配HTML網頁裡面的DataBinding Expression(資料細節運算式)。

2).  再來搭配「文章二」的 GridView1_RowDataBound事件.....照理來說應該萬無一失啊!

 

但是.....第一列記錄一定會出現 0,

真正的第一列資料,卻出現在第二列了

我放一個正確的藍色GridView給您比對看看.......這結果實在傷腦筋!!!

 

 

 

 

 

錯誤的程式(上圖二)如下:

HTML畫面: 

使用這個技巧 DataBinding?資料繫結?資料綁定? #4--繫結運算式原來可以這樣用?(DataSet / DataReader)

        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            DataKeyNames="id"  DataSourceID="SqlDataSource1"
            onrowdatabound="GridView1_RowDataBound" >
            <Columns>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
                    ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
                <asp:BoundField DataField="student_id" HeaderText="student_id"
                    SortExpression="student_id" />
                <asp:BoundField DataField="city" HeaderText="city"
                    SortExpression="city" />
                <asp:TemplateField HeaderText="chinese" SortExpression="chinese">
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# myNO1 %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="math" SortExpression="math">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# myNO2 %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="總分&lt;br&gt;(自己動手加入的欄位)">
                    <ItemTemplate>
                        <font color="blue"><b>
                        <%# myTotal %></b></font>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>


        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:testConnectionString %>"
            SelectCommand="SELECT * FROM [student_test]"></asp:SqlDataSource>

 

後置程式碼:

使用這個技巧,請看  [習題]GridView樣版內部,改用CheckBox/Radio/DropDownList(單/複選)控制項,取代TextBox

(這篇文章有三種解法,我使用第三種方法來作。)

01
02 //----自己寫的(宣告)----
03 using System.Web.Configuration;
04 using System.Data;
05 using System.Data.SqlClient;

06 //----自己寫的----
07
08
09
10     //== 重點 =================================
11     //== 必須設定為 public。否則就會視為 private而發生錯誤。
12     public int myNO1, myNO2, myTotal;
13     public int i = 0;
14     //=======================================
15
16
17     protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
18     {
19         //----連結資料庫----
20         SqlConnection Conn = new SqlConnection("資料庫連結字串");
21         SqlDataAdapter myAdapter = new SqlDataAdapter("select * from student_test", Conn);
22
23         DataSet ds = new DataSet();
24
25
26         myAdapter.Fill(ds, "s_test");    //---- 執行SQL指令。取出資料放進 DataSet。
27
28         //註解:執行SQL指令之後,把資料庫撈出來的結果,交由畫面上 DataBinding Expression來呈現。
29         //****************************************
30
33         if (e.Row.RowType == DataControlRowType.DataRow)
34         {
35             myNO1 = Convert.ToInt32(ds.Tables["s_test"].Rows[i]["chinese"]);
36             myNO2 = Convert.ToInt32(ds.Tables["s_test"].Rows[i]["math"]);
37
38               myTotal = myNO1 + myNO2;
39
40             i++;
41         }

42
43     }

 

 

 

 

為什麼會出錯呢???

.......WHY?  WHY??  WHY???

 


請看下一篇文章的說明,便知分曉:[習題]DataBinding?資料繫結?資料綁定? #7 -- 傷腦筋的 GridView加總、小計(原來如此 / 範例下載)

http://www.dotblogs.com.tw/mis2000lab/archive/2010/10/12/databinding_7_gridview_rowcreated.aspx

 


 

......  寄信給我    mis2000lab (at) 雅虎.com.台灣  ....................................................................................................

ASP.NET 4.0 專題實務 ( I )--入門實戰篇

  ASP.NET 4.0 專題實務(I)_VB  ASP.NET 4.0 專題實務(I)_C#

(松崗出版,VB版  / C#版

範例比上一本書增加 166%,內容(頁數)增加 135%

上 / 下兩集 (2010年)已經出版囉 ~ 歡迎到此參加團購


ASP.NET專題實務( II ):範例集 與 4.0新功能

 

.................................................................................................... 寄信給我    mis2000lab (at) 雅虎.com.台灣 ........

 


arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()