MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

[习题]DataBinding?资料系结?资料绑定? #6 -- 伤脑筋的 GridView加总、小计

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

 

 

之前有两个范例,颇为有趣:

文章一:  DataBinding?资料绑定? #4--绑定表达式原来可以这样用?(DataSet / DataReader) (2010-10-28 17:37) 

文章二:  [习题]GridView样版内部,改用CheckBox/Radio/DropDownList(单/复选)控件,取代TextBox

      (这篇文章有三种解法,我使用第三种方法来作。)

 

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

我把这两个范例混合起来,发现一件怪事。

 

本范例可以放在「下集 / ASP.NET专题实务 II -- 范例集与 4.0新功能」

      第六章 作为补充习题!

 

 


Q:我想要用 DataBinding Expression(数据细节表达式),如同上面的文章一。
        来撰写 GridView的「加总」功能。
        下图是学生数据,我要增加一个新的「总分」字段放在最后。

 

这是一个很简单的功能,有很多方法可以完成。

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

 

正确运作的结果应该类似(图一):

     


 


但我刚好上课讲解到DataBinding Expression(资料绑定表达式)
所以想用类似的方法做出来。

 

融合上面两篇文章的技巧,写出来的成果竟然会是这样?!(请看下面,图二)
让我大吃一惊!!!

 

     

 

错误的状况 --

1).  使用上面「文章一」的技巧来作,后置程序代码的「公用变数」搭配HTML网页里面的DataBinding Expression(资料细节表达式)。

DataBinding?资料绑定? #4--绑定表达式原来可以这样用?(DataSet / DataReader) (2010-10-28 17:37) 

 

2).  再来搭配「文章二」的 GridView1_RowDataBound事件.....照理来说应该万无一失啊!

 

但是.....第一列记录一定会出现 0,

真正的第一列数据,却出现在第二列了。

 

我放一个正确的蓝色GridView给您比对看看.......这结果实在伤脑筋!!!

 

 

 

 

错误的程序(上图)如下:

 

HTML画面:

 

使用这个技巧 DataBinding?资料系结?资料绑定? #4--系结表达式原来可以这样用?(DataSet / DataReader)

        <asp:GridViewID="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加总、小计(原来如此/ 范例下载)

 

posted on 2010-10-28 17:48  MIS2000 Lab.  阅读(384)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub