GridView控件相关2

---恢复内容开始---

此文档主要侧重---GridView控件上的 【更新】 和 【删除】 两个事件的具体操作:

1.在非编辑状态,如何取出【BoundField】模板中的绑定值:

string s = GridView1.Rows[2].Cells[0].Text;

在编辑状态下,如何取出GridView中用【BouldField】绑定的内容------即,如何获得【TextBox】中用户输入的内容:

((TextBox)GridView1.Rows[2].Cells[0].Controls[0]).Text; 

在GridView中,获得【模板列】中某个控件的值时,使用FindControl("")来得到这个控件

2.要实现【更新】和【删除】两个功能,必须在GridView控件上增加一列展示Id的值。

1).假如用【BoundField】来展示Id,则点击编辑后,Id也会变成可修改的,这样不符合业务逻辑,所以必须设置这个模板的一个属性ReadOnly=“true”。

2).用【BoundField】来展示Id的另一个问题,Id会在页面显示出来,对于用户来说,不友好(用户不明白Id代表什么意思)。解决方案----把【BoundField】隐藏,即Visable="False"。对于使用【BouldField】绑定数据,这一列如果被隐藏的话,那么隐藏的值无法获得到.

3).所以,对于上述情况的解决方案是,使用模板列来绑定Id,模板列隐藏,具体代码为:  

1             <asp:TemplateField HeaderText="Id" Visible="False">
2                 <ItemTemplate>
3                     <asp:Label  runat="server" Text=‘<%#Eval("TypeId") %>‘></asp:Label>
4                 </ItemTemplate>
5             </asp:TemplateField>

-------其中 Visible="False"  表示隐藏字段,不显示。

-------而 Text=‘<%#Eval("TypeId") %>‘  和 Text=‘<%#Bind("TypeId") %>‘ 的区别在于:


区别 1.eval是只读数据,bind是可更新的.

2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %>

2.若GridView中绑定列里面 设置 内容格式 DataFormateString ={0:d} ,则 必须把 属性 HtmlCode 设置为false,否则无法 起作用;

Eval 单向绑定:数据是只读的
        Bind 双向绑定:数据可以更改,并返回服务器端,服务器可以处理更改后的数据,如存入数据库.

前台页面代码:

 1 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
 2         <Columns>
 3             <asp:TemplateField HeaderText="Id" Visible="False">
 4                 <ItemTemplate>
 5                     <asp:Label ID="id" runat="server" Text=‘<%#Bind("TypeId") %>‘></asp:Label>
 6                 </ItemTemplate>
 7             </asp:TemplateField>
 8             <asp:BoundField DataField="TypeName" HeaderText="房间类型">
 9 <ItemStyle Width="100px"></ItemStyle>
10             </asp:BoundField>
11             <asp:BoundField DataField="Price" HeaderText="房间价格" >
12 <ItemStyle Width="100px"></ItemStyle>
13             </asp:BoundField>
14             <asp:CheckBoxField DataField="AddBed" HeaderText="是否加床">
15 <ItemStyle Width="50px"></ItemStyle>
16             </asp:CheckBoxField>
17             <asp:BoundField DataField="BedPrice" HeaderText="加床价格">
18 <ItemStyle Width="100px"></ItemStyle>
19             </asp:BoundField>
20             <asp:BoundField DataField="Remark" HeaderText="备注">
21 <ItemStyle Width="200px"></ItemStyle>
22             </asp:BoundField>
23             <asp:TemplateField HeaderText="编辑;删除" ShowHeader="False">
24                 <EditItemTemplate>
25                     <asp:LinkButton runat="server" CausesValidation="True" CommandName="Update" Text="更新"></asp:LinkButton>
26                     &nbsp;<asp:LinkButton runat="server" CausesValidation="False" CommandName="Cancel" Text="取消"></asp:LinkButton>
27                 </EditItemTemplate>
28                 <ItemTemplate>
29                     <asp:LinkButton runat="server" CausesValidation="False" CommandName="Edit" Text="编辑"></asp:LinkButton>
30                     &nbsp;<asp:LinkButton runat="server" CausesValidation="False" CommandName="Delete" Text="删除"></asp:LinkButton>
31                 </ItemTemplate>
32                 <ItemStyle HorizontalAlign="Center" Width="100px" Wrap="false" />
33             </asp:TemplateField>
34         </Columns>
35     </asp:GridView>

后台页面代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Web;
  4 using System.Web.UI;
  5 using System.Web.UI.WebControls;
  6
  7 namespace Maticsoft.Web
  8 {
  9     public partial class _1 : System.Web.UI.Page
 10     {
 11         Maticsoft.BLL.RoomType bll = new BLL.RoomType();
 12         protected void Page_Load(object sender, EventArgs e)
 13         {
 14             if (!IsPostBack)
 15             {
 16                 GridViewDataBind();
 17             }
 18         }
 19         /// <summary>
 20         /// 绑定数据
 21         /// </summary>
 22         private void GridViewDataBind()
 23         {
 24             //想得到所有的数据,只要在参数中传递 空字符串即可!
 25             //返回值为 泛型集合
 26             List<Model.RoomType> list = bll.GetModelList("");
 27             GridView1.DataSource = list;
 28             GridView1.DataBind();
 29         }
 30         /// <summary>
 31         /// 取消编辑
 32         /// </summary>
 33         /// <param name="sender"></param>
 34         /// <param name="e"></param>
 35         protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
 36         {
 37             //取消编辑时只需要将当前编辑行的EditIndex设置为-1即可
 38             GridView1.EditIndex = -1;
 39
 40             //对于每次操作之后,都要进行一次数据绑定才能立即显示出修改后的效果
 41             GridViewDataBind();
 42         }
 43         /// <summary>
 44         /// 编辑事件
 45         /// </summary>
 46         /// <param name="sender"></param>
 47         /// <param name="e"></param>
 48         protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
 49         {
 50             //EditIndex 属性:指用户正在编辑的行,如果没有编辑任何行,设置为-1
 51             //NewEditIndex 属性:e.NewEditIndex是取到用户当前点击的行数。
 52             GridView1.EditIndex = e.NewEditIndex;
 53             GridViewDataBind();
 54         }
 55         /// <summary>
 56         /// 更新事件
 57         /// </summary>
 58         /// <param name="sender"></param>
 59         /// <param name="e"></param>
 60         protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
 61         {
 62             //先判断GridView1是否处于编辑状态
 63             if (GridView1.EditIndex == -1)
 64             {
 65                 return;
 66             }
 67             //取到当前编辑列的索引,即列数
 68             int editindex = GridView1.EditIndex;
 69
 70             //编辑状态下,通过下面这种方法获取到修改后的值
 71             string typename = ((TextBox)GridView1.Rows[editindex].Cells[1].Controls[0]).Text;
 72             decimal price = Convert.ToDecimal(((TextBox)GridView1.Rows[editindex].Cells[2].Controls[0]).Text);
 73             bool addbed = ((CheckBox)GridView1.Rows[editindex].Cells[3].Controls[0]).Checked;
 74             decimal bedprice = Convert.ToDecimal(((TextBox)GridView1.Rows[editindex].Cells[4].Controls[0]).Text);
 75             string remark = ((TextBox)GridView1.Rows[editindex].Cells[5].Controls[0]).Text;
 76
 77             //在GridView中,获得模板列中某个控件的值时,使用FindControl("控件ID")来得到这个控件
 78             //GridView1.Rows[editRowIndex].Cells[0].FindControl("id")
 79             //(Label)GridView1.Rows[editRowIndex].Cells[0].FindControl("id"))----控件强转为Label
 80             //((Label)GridView1.Rows[editRowIndex].Cells[0].FindControl("id")).Text----取到Label的Text
 81             //Convert.ToInt32(~)-----------------将Text的String类型转换为int类型
 82             //////综上:获得了Id属性
 83             int id = Convert.ToInt32(((Label)GridView1.Rows[editindex].Cells[1].FindControl("id")).Text);
 84
 85             //修改前,先通过Id获得数据库中,模型的默认值
 86             Model.RoomType model = new Model.RoomType();
 87             model = bll.GetModel(id);
 88
 89             //将修改后的值更新到模型中,然后再更新到数据库中,其他值保持不变
 90             model.TypeName = typename;
 91             model.Price = price;
 92             model.AddBed = addbed;
 93             model.BedPrice = bedprice;
 94             model.Remark = remark;
 95
 96             if (bll.Update(model))
 97             {
 98                 Maticsoft.Common.MessageBox.Show(this, "更新信息成功!");
 99
100                 //很关键的一步:修改成功后,应将GridView设置为非编辑状态,即 GridView1.EditIndex = -1;
101                 GridView1.EditIndex = -1;
102
103                 //然后,再次绑定数据,这样才能展示给用户更新后的信息
104                 this.GridViewDataBind();
105             }
106             else
107             {
108                 Maticsoft.Common.MessageBox.Show(this, "更新信息失败!");
109             }
110
111
112         }
113         /// <summary>
114         /// 删除事件
115         /// </summary>
116         /// <param name="sender"></param>
117         /// <param name="e"></param>
118         protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
119         {
120             int editindex = GridView1.EditIndex;
121             int id = Convert.ToInt32((((Label)GridView1.Rows[0].Cells[0].FindControl("id")).Text));
122             if (bll.Delete(id))
123             {
124                 Maticsoft.Common.MessageBox.Show(this, "删除成功!");
125                 GridViewDataBind();
126             }
127             else
128             {
129                 Maticsoft.Common.MessageBox.Show(this, "删除成功!");
130             }
131         }
132     }
133 }

//上面修改代码有些失误:

int editindex = e.RowIndex;
int id = Convert.ToInt32((((Label)GridView1.Rows[editindex].Cells[0].FindControl("id")).Text));

  

---恢复内容结束---

时间: 2024-12-21 18:03:11

GridView控件相关2的相关文章

GridView控件相关

---恢复内容开始--- GridView控件的[AutoGenerateColumns]属性(bool类型)的意思是----运行时是否基于关联的数据源自动生成列. 这样造成的影响是列的标题自动生成无法进行修改. 想手工的控制列名,则需把这个属性设为False.然后再控件的右上角点击,出现[编辑列],或者在属性页面设置[Columns]属性,都会弹出编辑列的界面: (1).[BoundField]----绑定以文本形式显示一个字段.它的属性: HeaderText----就是显示的列名, Dat

数据绑定技术一:GridView控件

在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 使用数据源控件可以不用编写任何代码就可以实现页面的数据绑定. 2.数据源控件的种类 .NET框架提供了如下几个数据源控件: SqlDataSource,它用来访问存储在关系数据中的数据源,它与SQL Server一起使用时支持高级缓存功能.当数据作为DataSet对象返回时,此控件还支持排序.筛选和

GridView控件通过bit值显示复选框状态

前几天用VS2013做了一个Asp.net下用GridView控件显示数据选中状态的小例子,引发了关于bit的一些新认识. 先简单说说我这个例子吧. 在VS里新建一个web窗体,然后拖入一个GridView控件,绑定Sql Server数据库里的数据源,再通过设置模板添加一个新列.在这个列中加入一个CheckBox控件,然后绑定到数据库里的字段. 开始我设置这个字段的类型为varchar,字段的值为True.False等.绑定后却无法达到想要的效果,即F5后网页内数据库isText字段值为Tru

C#操作GridView控件

GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上.下面就是一个利用GridView控件进行数据绑定的小例子,内容如下: 数据来源自一个XML文件,至于如何操作XML文件,这里不作详细描述,具体可以参考http://www.cnblogs.com/programsky/p/3816073.html 1.XML内容如下: <?xml version="1.0" encoding="utf-8"?&

GridView控件详解

一.介绍 GridView控件一表格形式显示数据源中的数据.提供对列进行排序.分页以及编辑.删除单个记录的功能. 二.绑定数据源 第一种使用DataSourceID属性.可以直接把GridView控件绑定到数据源控件上,以利用数据源控件的功能实现编辑.删除.排序.分页等功能.(初级) 第二种可以绑定到ADO.NET数据集和数据读取器对象上,但需要为所有功能编写后台代码.(一般使用这种方式) private void gridViewBind() { //获取GridView排序数据列及排序方向

GridView控件

GridView简介: GridView控件以表格的形式显示数据源的值,没列表示一个字段,每行表示一条记录. 该控件提供了内置排序功能.内置更新(修改)和删除.分页.行选择功能.以编程方式访问GridView对象模型以动态设置属性以及处理事件等功能. 可以通过主题和样式进行自定义外观,实现多种样式的数据展示. 常见属性: AllowPaging设置是否启用分页 AllowSorting设置是否启用排序功能 AutoGenerateColumns:设置是否为数据源中的每个字段自动创建绑定字段.默认

asp.net GridView控件的列属性

BoundField 默认的数据绑定类型,通常用于显示普通文本 CheckBoxField 显示布尔类型的数据.绑定数据为TRUE时,复选框数据绑定列为选中状态:绑定数据为FALSE时,则显示未选中状态.在正常情况下,CheckBoxField显示在表格中的复选框控件处于只读状态.只有GridView控件的某一行进入编辑状态后,复选框才恢复为可修改状态. CommandField 显示用来执行选择,编辑或删除操作的预定义命令按钮,这些按钮可以呈现为普通按钮,超链接,图片等外观. 通过字段的But

LayoutParams 命名的时候,最好用与子控件相关的字符串命名,

1 @Override 2 public View initView() { 3 RelativeLayout container = new RelativeLayout(UIUtils.getContext());// 容器 4 AbsListView.LayoutParams ctparams = new AbsListView.LayoutParams( 5 AbsListView.LayoutParams.MATCH_PARENT, UIUtils.dip2px(150)); 6 co

IOS学习资源收集--开发UI控件相关

收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 示例: 网址:https://github.com/HeYang123456789/UIView 2.计时相关的自定义UILabel控件 网址:https://github.com/mineschan/MZTimerLabel