本人一般都是制作后台管理和统计系统,对产品展示类页面实在不在行,现遇头疼问题,如何使用GridView实现以下格式的展示页面,
不知从何处下手,在此请各路高手帮忙解决,给出代码。
格式如下:产品1图片 产品2图片 产品3图片 产品4图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论
产品5图片 产品6图片 产品7图片 产品8图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论
产品9图片 产品10图片 产品11图片 产品12图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论所有信息都是从数据库中读出,进行绑定。
不知从何处下手,在此请各路高手帮忙解决,给出代码。
格式如下:产品1图片 产品2图片 产品3图片 产品4图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论
产品5图片 产品6图片 产品7图片 产品8图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论
产品9图片 产品10图片 产品11图片 产品12图片
产品说明 产品说明 产品说明 产品说明
产品价格 产品价格 产品价格 产品价格
产品评论 产品评论 产品评论 产品评论所有信息都是从数据库中读出,进行绑定。
第二:可以对GgridView分组
http://www.cnblogs.com/downmoon/archive/2008/08/26/1276538.html
http://blog.csdn.net/downmoon/archive/2008/08/26/2832007.aspx
看起来很简单
不用代码就搞定但用了DATALIST和REPEATER才发现GRIDVIEW不像想象的那么好用
找一篇介绍DATALIST的文章看一遍
基本就会做了
==
找任何一本asp.net 2.0的书都有
页脚<FooterTemplate> </FooterTemplate>
数据记录<ItemTemplate> </ItemTemplate> <AlternatingItemTemplate> 交替显示项 </AlternatingItemTemplate>
<SelectedItemTemplate>选中时的显示方式 </SelectedItemTemplate>
<EditItemTemplate> 编辑时的显示方式 </EditItemTemplate>
<SeparatorTemplate> 数据记录分隔符 </SeparatorTemplate>
编辑模版,里面可以嵌入控件,绑定数据。 <ItemTemplate> <table> <tr> <td><%# DataBinder.Eval(Container.DataItem, "持股名称") %></td> <td><%# DataBinder.Eval(Container.DataItem, "市值", "{0:n}") %></td> <td><%# DataBinder.Eval(Container.DataItem, "净值", "{0:n}") %></td> </tr> </table> </ItemTemplate>
设置外观 RepeatLayout 属性设置显示方式 RepeatDirection 显示方向 RepeatColumns 列数
事件 加入模版列的按钮会将其click事件反升到 ItemCommand 事件,也可设置 CommandName 来响应不同的事件,如设为:edit,即引发EditCommand()等。 注:若设为:select 则会引发SelectedIndexChanged 和ItemCommand事件 SelectedItemTemplate模版; 添加详细信息的控件,当用户选择了该项,选择模版则显示。 private void DataList1_ItemCommand(……) { switch(e.CommandName) { case "select": this.DataList1.SelectedIndex=e.Item.ItemIndex; string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex]; //在此获得该条记录的详细数据,在SelectedItemTemplate模版里显示。 break; case "unselect": this.DataList1.SelectedIndex=-1; break; } this.DataList1.DataBind();//一定要 }
EditItemTemplate模版 编辑: this.DataList1.EditItemIndex=e.Item.ItemIndex; this.DataList1.DataBind(); 更新: 得到主键 string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex]; 得到模版里的控件 TextBox box=(TextBox)e.Item.FindControl("TextBox1"); 更新记录 this.DataList1.DataBind(); 取消: this.DataList1.EditItemIndex=-1; this.DataList1.DataBind();
删除项 一次勾选多条记录,一次删除 foreach(DataListItem i in this.DataList1.Items) { bool IsChecked=((CheckBox)i.FindControl("deletectr")).Checked; if(IsChecked) { string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex]; 删除操作 } } 运行中自定义DataList控件 //当创建DataList控件中的任意项时 private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) { switch(e.Item.ItemType) { case ListItemType.Header: e.Item.ForeColor=Color.Red; e.Item.BackColor=Color.Black; break; case ListItemType.Item: e.Item.BackColor=Color.Black; break; } }
//当模版中的项被数据绑定时发生,数据被显示到客户端前加以访问的最后机会 private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e) { if((e.Item.ItemType==ListItemType.Header)||(e.Item.ItemType==ListItemType.Item)) { System.Data.Common.DbDataRecord drv= (System.Data.Common.DbDataRecord)e.Item.DataItem; if((decimal)drv["库存量"]<1000) { e.Item.ForeColor=Color.Red; } } }
另种方式
if((e.Item.ItemType==ListItemType.Header)||(e.Item.ItemType==ListItemType.Item)) { DataRowView drv=(DataRowView)e.Item.DataItem; string department=(string)drv["部门"]; switch(department) { case "销售部": e.Item.BackColor=Color.Black; break; case "技术部": e.Item.BackColor=Color.Red; break; } }