GridView应用总结

来源:互联网 发布:mac无法登陆app store 编辑:程序博客网 时间:2024/05/17 02:04

081229没有数据时显示列名的方法:即增加一空行

http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=7233

  1. if (dt.Rows.Count > 0)
  2.             return dt;
  3.         else
  4.         {
  5.             dt.Rows.Add(dt.NewRow());
  6.             return dt;
  7.         } 

实例一:

前台:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="stu_GridView.aspx.cs" Inherits="stu_GridView" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>无标题页</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.         <asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" >
  11.             <Columns>
  12.                 <asp:BoundField HeaderText="编号" DataField="id" />
  13.                 <asp:HyperLinkField DataTextField="name" Text="姓名" DataNavigateUrlFields="id" DataNavigateUrlFormatString="default.aspx?{0}" />
  14.                 <asp:BoundField HeaderText="时间" DataField="date" DataFormatString="{0:yyyy-MM-dd}" />  
  15.             </Columns>
  16.         </asp:GridView>
  17.     </div>
  18.     </form>
  19. </body>
  20. </html>

后台:

  1. public partial class stu_GridView : System.Web.UI.Page
  2. {
  3.     protected void Page_Load(object sender, EventArgs e)
  4.     {
  5.         Bind();
  6.     }
  7.     private void Bind()
  8.     {
  9.         DataTable dt = new DataTable();
  10.         //增加列
  11.         dt.Columns.Add("id");
  12.         dt.Columns.Add("name");
  13.         dt.Columns.Add("date");
  14.         //新建一行
  15.         DataRow dr = dt.NewRow();
  16.         dr[0] = "1";
  17.         dr[1] = "tree";
  18.         dr[2] = DateTime.Now;
  19.         //添加一行
  20.         dt.Rows.Add(dr);
  21.         gv.DataSource = dt;
  22.         gv.DataBind();
  23.     }
  24. }

实例二:最基本最实用最常用

下载地址http://download.csdn.net/source/871334

GridView基本应用
GridView有很多技巧,但是常用的不多,这些基本技巧必须达到手写的熟练程度.
其他技巧都以此为基础.

1.设置AutoGenerateColumns为false

2.boundfield设置只读,则处于编辑状态时,不变为编辑框.
 只读字段的取值方法.
 <asp:boundfield DataField="userid" HeaderText="编号" ReadOnly="True" />
 string id = gv_base.Rows[e.RowIndex].Cells[0].Text;
 非只读字段的取值方法.
 <asp:boundfield DataField="username" HeaderText="用户名" />
 string uname = ((TextBox)gv_base.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
 注意:编辑,更新,取消属性一列即Columns[3].Controls[0]或[1]或[2]

3.控制列的显示隐藏
 if (gv_base.Columns[5].Visible == false)
  gv_base.Columns[5].Visible = true;
 else
  gv_base.Columns[5].Visible = false;
 

4.commandfield
 不管编辑,更新,取消,都需要重新绑定.
 注意点编辑时也需要重新绑定.
 意义:给GridView标记了要编辑的行,然后绑定时,到了那一行,就会显示编辑模板.

5.设置主键 DataKeyNames="userid"
 取值方法
 string key = gv_base.DataKeys[e.RowIndex].Value.ToString();
 多个主键时的设置和取值方法
 设置
 DataKeyNames="userid,username"
 取值
 string key = gv_base.DataKeys[e.RowIndex].Values[0].ToString();
 string key1 = gv_base.DataKeys[e.RowIndex].Values[1].ToString();

6.删除操作的特殊性,由于所有列都处于只读状态,所以可以全部用此法取值.
    string id = gv_base.Rows[e.RowIndex].Cells[0].Text;
    string uname = gv_base.Rows[e.RowIndex].Cells[1].Text;
   
7.为删除按钮添加js函数
    private void Bind()
    {
        gv_base.DataSource = OleDbHelper.ExecuteDt("select * from userinfo");
        gv_base.DataBind();
        for (int i = 0; i < gv_base.Rows.Count; i++)
        {
            ((LinkButton)(gv_base.Rows[i].Cells[4].Controls[0])).Attributes.Add
                ("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
        }
    }
    问题,这段代码不管放在Page_Load还是Bind()里均会出现问题,就是进入编辑状态后,列号改变了.
    似乎应该放在DataBound里?

8.链接列的应用
 <asp:hyperlinkfield DataNavigateUrlFields="userid,power"
 DataNavigateUrlFormatString="Detail.aspx?id={0}&amp;power={1}"
 HeaderText="详情" Target="_blank" Text="详细内容" />
 
9.问题
 进入编辑状态时,删除按钮找不到了.

10.分页原理,别忘了,设置AllowPaging="True"
    protected void gv_base_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gv_base.PageIndex = e.NewPageIndex;
        Bind();
        Response.Write("第" + e.NewPageIndex + "页,共" + gv_base.PageCount + "页");
    }
    把这段代码可以放在其他函数,比如一个按钮事件里.
    gv_base.PageIndex = 1;
        Bind();
 前台

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="baseuse_Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head runat="server">
  5.     <title>GridView基本应用</title>
  6. </head>
  7. <body>
  8.     <form id="form1" runat="server">
  9.     <div>
  10.         <asp:gridview ID="gv_base" runat="server" AutoGenerateColumns="False" DataKeyNames="userid,username" OnRowCancelingEdit="gv_base_RowCancelingEdit" OnRowEditing="gv_base_RowEditing" OnRowUpdating="gv_base_RowUpdating" OnRowDeleting="gv_base_RowDeleting" OnPageIndexChanging="gv_base_PageIndexChanging" AllowPaging="True" PageSize="3">
  11.             <columns>
  12.                 <asp:boundfield DataField="userid" HeaderText="编号" ReadOnly="True" />
  13.                 <asp:boundfield DataField="username" HeaderText="用户名" />
  14.                 <asp:boundfield DataField="password" HeaderText="密码" />
  15.                 <asp:commandfield ShowEditButton="True" />
  16.                 <asp:commandfield ShowDeleteButton="True" />
  17.                 <asp:hyperlinkfield DataNavigateUrlFields="userid,power" DataNavigateUrlFormatString="Detail.aspx?id={0}&power={1}"
  18.                     HeaderText="详情" Target="_blank" Text="详细内容" />
  19.             </columns>
  20.         </asp:gridview>
  21.         <br />
  22.         <asp:button ID="btn_control" runat="server" OnClick="btn_control_Click" Text="控制详情列的显示" />
  23.     </div>
  24.     </form>
  25. </body>
  26. </html>

后台

  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. public partial class baseuse_Default : System.Web.UI.Page
  12. {
  13.     protected void Page_Load(object sender, EventArgs e)
  14.     {
  15.         if (!IsPostBack)
  16.         {
  17.             Bind();
  18.         }
  19.     }
  20.     private void Bind()
  21.     {
  22.         gv_base.DataSource = OleDbHelper.ExecuteDt("select * from userinfo");
  23.         gv_base.DataBind();
  24.     }
  25.     protected void gv_base_RowEditing(object sender, GridViewEditEventArgs e)
  26.     {
  27.         gv_base.EditIndex = e.NewEditIndex;
  28.         Bind();//设置编辑行后,需要重新绑定.
  29.     }
  30.     protected void gv_base_RowUpdating(object sender, GridViewUpdateEventArgs e)
  31.     {
  32.         string id = gv_base.Rows[e.RowIndex].Cells[0].Text;//当设置绑定字段为只读时,这样取值.
  33.         string uname = ((TextBox)gv_base.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
  34.         //设置主键时的取值方法.
  35.         string key = gv_base.DataKeys[e.RowIndex].Values[0].ToString();
  36.         string key1 = gv_base.DataKeys[e.RowIndex].Values[1].ToString();
  37.         Response.Write(id + uname + key + key1);
  38.         gv_base.EditIndex = -1;
  39.         Bind();
  40.     }
  41.     protected void gv_base_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
  42.     {
  43.         gv_base.EditIndex = -1;
  44.         Bind();
  45.     }
  46.     protected void gv_base_RowDeleting(object sender, GridViewDeleteEventArgs e)
  47.     {
  48.         string id = gv_base.Rows[e.RowIndex].Cells[0].Text;
  49.         string uname = gv_base.Rows[e.RowIndex].Cells[1].Text;
  50.         Response.Write(id + uname);
  51.         Bind();
  52.     }
  53.     protected void btn_control_Click(object sender, EventArgs e)
  54.     {
  55.         if (gv_base.Columns[5].Visible == false)
  56.             gv_base.Columns[5].Visible = true;
  57.         else
  58.             gv_base.Columns[5].Visible = false;
  59.         gv_base.PageIndex = 1;
  60.         Bind();
  61.     }
  62.     protected void gv_base_PageIndexChanging(object sender, GridViewPageEventArgs e)
  63.     {
  64.         gv_base.PageIndex = e.NewPageIndex;
  65.         Bind();
  66.         Response.Write("第" + e.NewPageIndex + "页,共" + gv_base.PageCount + "页");
  67.     }
  68. }

end

原创粉丝点击