谢谢各位高手,请教一个基础的问题.这是一个购物车页面后台代码.
在前页面,已经添加Session["shopcar"]成功.
在gridview列中绑定了"NO,,goodsID,_name"等等字段,调用PageIndexChanging事件.
但是,购物车GridView是空的,在页面上不显示.
望不吝赐教!!!
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using System.Data.SqlClient;
12 using System.Text.RegularExpressions;
13
14
15 public partial class cart : System.Web.UI.Page
16 {
17 DBClass sqloperate = new DBClass();
18 DataTable dtTable;
19 string sqlstr;
20 Hashtable ht;
21
22
23 protected void Page_Load(object sender, EventArgs e)
24 {
25 if (!IsPostBack)
26 {
27 ST_check_Login();
28
29
30 if (Session["ShopCar"] == null)
31 {
32 ......提示信息
33
34 }
35 else
36 {
37
38 ht = (Hashtable)Session["ShopCart"];
39
40 if (ht.Count == 0)
41 {
42
43
44 .........提示信息
45 }
46 else
47 {
48
49 dtTable = new DataTable();
50
51 DataColumn column1 = new DataColumn("No"); //序号列
52 DataColumn column2 = new DataColumn("goodsID"); //商品ID代号
53 DataColumn column3 = new DataColumn("_name"); //商品名称
54 DataColumn column4 = new DataColumn("num"); //数量
55 DataColumn column5 = new DataColumn("price"); //单价
56 DataColumn column6 = new DataColumn("totalfee");//总价
57 dtTable.Columns.Add(column1); //添加新列
58 dtTable.Columns.Add(column2);
59 dtTable.Columns.Add(column3);
60 dtTable.Columns.Add(column4);
61 dtTable.Columns.Add(column5);
62 dtTable.Columns.Add(column6);
63 DataRow row;
64
65
66 foreach (object key in ht.Keys)
67 {
68 row = dtTable.NewRow();
69 row["goodsID"] = key.ToString;
70 row["num"] = ht[key].ToString();
71 dtTable.Rows.Add(row);
72 }
73
74 DataTable dstable;
75 int i = 1;
76 float price;
77 float totalfee = 0;
78 int count;
79
80 foreach (DataRow drRow in dtTable.Rows)
81 {
82 sqlstr = "select _name,fee from goods_info where goodsID=" + Convert.ToInt32(drRow["goodsID"].ToString()); ;
83 dstable = sqloperate.GetDataSetStr(sqlstr, "tbGI");
84 drRow["No"] = i;
85 drRow["_name"] = dstable.Rows[0][0].ToString();//商品名称
86 drRow["price"] = (dstable.Rows[0][1].ToString());//单价
87 price = float.Parse(dstable.Rows[0][1].ToString());//单价
88 count = Int32.Parse(drRow["Num"].ToString());
89 drRow["totalfee"] = price * count; //总价
90 totalfee += price * count; //计算合价
91 i++;
92
93 }
94 this.Label2.Text = "商品总计花费:" + totalfee.ToString();
95 this.GridView1.DataSource = dtTable.DefaultView;
96 this.GridView1.DataKeyNames = new string[] { "goodsID" };
97 this.GridView1.DataBind();
98 }
99 }
100 }
101
102
103
104 }
105 public void ST_check_Login()
106 {
107
108 if ((Session["username"] == null))
109 {
110 Response.Write("<script>alert('对不起!您不是会员,请先注册!');location='Default.aspx'</script>");
111 Response.End();
112 }
113 }
114
115
116 public void bind()
117 {
118
119
120 if (Session["ShopCar"] == null)
121 {...............提示信息
122
123 }
124 else
125 {
126
127 ht = (Hashtable)Session["ShopCart"];
128
129
130 if (ht.Count == 0)
131 {
132 ......提示信息
133 }
134 else
135 {
136
137 dtTable = new DataTable();
138
139 DataColumn column1 = new DataColumn("No"); //序号列
140 DataColumn column2 = new DataColumn("goodsID"); //商品ID代号
141 DataColumn column3 = new DataColumn("_name"); //商品名称
142 DataColumn column4 = new DataColumn("num"); //数量
143 DataColumn column5 = new DataColumn("price"); //单价
144 DataColumn column6 = new DataColumn("totalfee");//总价
145 dtTable.Columns.Add(column1); //添加新列
146 dtTable.Columns.Add(column2);
147 dtTable.Columns.Add(column3);
148 dtTable.Columns.Add(column4);
149 dtTable.Columns.Add(column5);
150 dtTable.Columns.Add(column6);
151 DataRow row;
152
153
154 foreach (object key in ht.Keys)
155 {
156 row = dtTable.NewRow();
157 row["goodsID"] = key.ToString();
158 row["num"] = ht[key].ToString();
159 dtTable.Rows.Add(row);
160
161 }
162
163 DataTable dstable;
164 int i = 1;
165 float price;
166 float totalfee = 0;
167 int count;
168
169 foreach (DataRow drRow in dtTable.Rows)
170 {
171 sqlstr = "select _name,fee from goods_info where goodsID=" + Convert.ToInt32(drRow["goodsID"].ToString()); ;
172 dstable = sqloperate.GetDataSetStr(sqlstr, "tbGI");
173 drRow["No"] = i;
174 drRow["_name"] = dstable.Rows[0][0].ToString();//商品名称
175 drRow["price"] = (dstable.Rows[0][1].ToString());//单价
176 price = float.Parse(dstable.Rows[0][1].ToString());//单价
177 count = Int32.Parse(drRow["Num"].ToString());
178 drRow["totalfee"] = price * count; //总价
179 totalfee += price * count; //计算合价
180 i++;
181
182 }
183 this.Label2.Text = "商品总计花费:" + totalfee.ToString();
184 this.GridView1.DataSource = dtTable.DefaultView;
185 this.GridView1.DataKeyNames = new string[] { "goodsID" };
186 this.GridView1.DataBind();
187 }
188
189
190 }
191
192 }
193 protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
194 {
195 GridView1.PageIndex = e.NewPageIndex;
196 bind();
197
198 }
199
200 }
201
202
203
204
205
206
你返回的就是一个datatable,还要自己定义一个table把值填进去再绑定,这个我就不明白。
再者你绑定table感觉好麻烦,请将代码优化一下吧,bind()函数的内容也没必要写两次。
你的变量为什么在函数外定义?那里用到哪里定义好了
先确认 你分页事件有没有效果, 有没有调用, 调用了的话, 再看 里面调用的方法 有没有起作用: bind()有没有加载对应页的数据。
Hashtable ht = new Hashtable();
ht.Add("1", "one");
ht.Add("2", "two");
DataTable dtTable = new DataTable();
DataColumn column1 = new DataColumn("No"); //序号列 52
DataColumn column2 = new DataColumn("goodsID"); //商品ID代号 53
DataColumn column3 = new DataColumn("_name"); //商品名称 54
DataColumn column4 = new DataColumn("num"); //数量 55
DataColumn column5 = new DataColumn("price"); //单价 56
DataColumn column6 = new DataColumn("totalfee");//总价 57
dtTable.Columns.Add(column1); //添加新列
dtTable.Columns.Add(column2);
dtTable.Columns.Add(column3);
dtTable.Columns.Add(column4);
dtTable.Columns.Add(column5);
dtTable.Columns.Add(column6);
DataRow row;
foreach (object key in ht.Keys)
{
row = dtTable.NewRow();
row["goodsID"] = key.ToString();
row["num"] = ht[key].ToString();
dtTable.Rows.Add(row);
}
this.GridView1.DataSource = dtTable.DefaultView;
this.GridView1.DataKeyNames = new string[] { "goodsID" };
this.GridView1.DataBind();
至少这段没有什么问题,LZ你看下GridView配置。