码迷,mamicode.com
首页 > 其他好文 > 详细

GridView控件相关2

时间:2014-11-13 23:47:46      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   os   使用   sp   

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

此文档主要侧重---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 双向绑定:数据可以更改,并返回服务器端,服务器可以处理更改后的数据,如存入数据库.

前台页面代码:

bubuko.com,布布扣
 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>
View Code

后台页面代码:

bubuko.com,布布扣
  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 }
View Code

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

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

  

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

GridView控件相关2

标签:style   blog   http   io   color   ar   os   使用   sp   

原文地址:http://www.cnblogs.com/skyl/p/4095146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!