GridView用法,分页

GridView用法,分页一.基础部分分页:只有用SqlDataSource作为数据源的时候才有在用ObjectDataSource的时候需要另外写代码另外该控件的“排序”和“分页”都打勾的时候,先进行整体排序,再分页;当启用

大家好,又见面了,我是你们的朋友全栈君。

 

一.基础部分

分页:只有用SqlDataSource作为数据源的时候才有

在用ObjectDataSource的时候需要另外写代码

另外该控件的“排序”和“分页”都打勾的时候,先进行整体排序,再分页;

当启用“分页”时,还需再其属性面板指定以下属性:

AllowPaging

PageSize

PageIndex:当前索引

PageCount:这个会自动结算出来,得到总页数

1.BoundField字段:

DataFormatString

{0:c}:货币

{0:N}:数字

{0:yy-mm-dd}:日期

在模版列中,会用到<%# Bind(…)%><%# eval_r(…)%>

其中Bind是双向数据绑定的,不能单独使用,一般用于textbox等的Text属性,并且要用单引号,比如 标签内属性Text='<%# Bind(“Id”)%>’

Eval是单向数据绑定,可单独使用,常用于进行格式化,比如:Text='<%# eval_r(“publishDate”,”{0:yy-mm-dd}”)%>’

另外在进行三元表达式的时候需要进行转型,否则会没效果,如下:

Text='<%# eval_r(“gender”).ToString()==”1″?”“:”“%>’

又比如:

<asp:Label ID=”Label2″ runat=”server” Text='<%# eval_r(“gender”).ToString()==”True”?” “:”” %>’></asp:Label>   //Gender取值后要进行转换.ToString()

 

2.ButtonField————>GridViewRowCommand事件

CommandName:区分是哪个按钮–>e.CommandName,用于获取命令名

另外如果有“列”不想被修改,可以设置其readonly属性true

 

3.HyperLinkField

属性:

DataNavigatorUrlFormatString:设置urldetail.aspx?id={0}

DataVavigatorUrlFields = “id”————————————

DataTextField:显示字段

 

4.string text = gvHr.Rows[index].cells[0].Text

相当于 GridViewRow gr = gvHr.Rows[index];

string text = gr.Cells[0].Text;

 

5.一般gridview中的主键不显示出来,存放在DataKeyNames属性中,用DataKeys来获取;

另外如果把某列的visible属性设为false,那么该列将不会往返于服务器和客户端

eg

gvHr.DataKeyNames = new string[]{“Id”,”Name”};

gvHr.DataBind();

单个时取值: gvHr.DataKeys[index].Value.ToString();

多个时取值: gvHr.DataKeys[index].Values[“主键字段1″].ToString();

 

6.光棒效果

RowDataBound事件中写:

if(e.Row.RowType==DataControlRowType.DataRow)

{

e.Row.Attribute.Add(“onmouseover”,”currentColor=this.style.backgroundColor;this.style.backgroundColor=’red'”); //red用单引号

e.Row.Attribute.Add(“onmouseout”,”this.style.backgroundColor=currentColor;”)

}

 

二.进阶

1.GridView取得行和列的“单元格”的语法:

GvId.Rows[index].Cells[index].Text;

      或GridViewRow gvr = gvId.Rows[index];

string text = gvr.Cells[index].Text; //都是通过Text属性来取值

 

2.隐式存储主键:

存:gvId.DataKeyNames = new string[]{“主键字段名称1″,”主键字段名称2″……};

GvId.DataBind();

PS这里的主键字段名称1是实体类中的属性名,对应数据库中主键字段

取:gvId.DataKeys[index].Value.ToString();

gvId.DataKeys[index].Values[“名称1″].ToString();//有的时候这样子会报错

GvId.DataKeys[index][“名称1″].Value.ToString(); //有的时候得这样取

 

3.gridView中如何将取出来的0,1转换为中文,比如性别用男女表示

通过模板列来实现:

<itemTemplate>中通过表达式来实现

<asp:Label runat=”server ” ID=”gender” Text='<%# eval_r(“sex”).ToString()==”True”?”“:”“%>’ ></asp:Label>

</itemTemplate>

 

4.在模板列中可以调用服务器端的方法:

假设在当前页面的后置代码中有这么个方法:

public string GetDeptName(stringid){….}

在页面模板列中调用:

<itemTemplate>中通过表达式来实现

<asp:Label runat=”server ” ID=”gender” 

Text='<%# GetDeptName(eval_r(“id”).ToString())%>’ ></asp:Label>

</itemTemplate>

这里需要注意下传的参数eval_r(“id”).ToString(),好像这里无论怎么转型,传到后置代码中GetDeptName()方法中的参数都是object类型,因为之前做的一个Vip价格方法,方法在定义的时候直接用object来定义形参,然后在方法内部再进行转型,比如:public string GetVipPrice(object priceobject discount)

 

5.按钮事件:

a) RowCommand事件:不获得行号,即SelectedIndex属性永远是 -1

b) SelectedIndexChanging选择事件:

e.NewSelectedIndex:默认值是-1

例子:

protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)

{//选择事件

//默认值为-1

this.GridView1.SelectedIndex = e.NewSelectedIndex;

//显示主键(显式)

int index = e.NewSelectedIndex;

string key = this.GridView1.Rows[index].Cells[0].Text;

Response.Redirect(“show.aspx?id=”+key);

 

//无主键显式(隐式)[前提:设置过DataKeyNames]

string index = this.GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();

//凡是gridView做的一般都是这样子取主键的

}

c) RowEditing编辑事件:

一般只在代码中写:this.gvId.EditIndex = e.NewEditIndex;

            Bind();//自定义Bind绑定方法

d) RowCancellingEdit取消事件:

一般值在代码中写:this.gvId.EditIndex = -1;

  Bind();

e) RowUpdating更新事件:

string key = this.gvId.DataKeys[e.RowIndex].Value.ToString();

//获得值,非模板列

1. string value = (this.gvId.Rows[e.RowIndex].Cells[1].Controls[0] as TextBox).Text;

2. string value = (this.gvId.Rows[e.RowIndex].FindControl(“控件id”) as TextBox).Text

这里的2种方法是从单元格中查找所需的控件,依次将他转换为相应的控件来取值;注意这里的Controls[0]FindControl方法,有的时候会找不到控件而返回一个null导致为初始化的错误产生

PS:一般不报错,但是取到的值不是更新后的值时,一般就是Load事件了,IsPostBack属性要判断下

f) RowDeleting删除事件:

方法跟上面的事件差不多,只要获得主键,然后调用bll层的删除方法即可

g) RowDataBound事件:单选删除例子上面的LinkButton是手动在模板列中添加的控件,若要实现上面的删除功能,还需要在页面源码中给gridView添加上模板列(CommandField里面的删除功能)
 注意选中的地方,除了CommandName要用Delete(会自动对应到Delete事件),还需要手动添加CommandArgument属性

最后在RowDeleting事件中获得该值:

LinkButton lnb = gvId.Rows[e.RowIndex].FindControl(“lnkBtnDel”) as LinkButton;

string id = lnb.CommandArgument.ToString();

多选删除功能,只有一个总删除按钮时,用到checkbox

思路:

首先给删除按钮添加点击事件,同上:

this.btnDel.Attributes.Add(“onclick”,”return confirm(‘确认删除?’)”);

 

然后给【删除按钮添加事件】btnDel_Click(object senderEventArgs e)内添加

foreach(GridViewRow gr in this.gvId.Rows)

{

CheckBox chk = gr.FindControl(“chbSelect”) as CheckBox;

if(chk.Checked)

{

//获取主键

string key = this.gvId.DataKeys[gr.RowIndex].Value.ToString();

//执行删除操作

StringBuilder sbSql = new StringBuilder();

sbSql.AppendLine(“DELETE FROM [users] WHERE”);

sbSql.AppendLine(”  [userid]=@userid”);

SqlParameter[] param = new SqlParameter[]{

new sqlParameter(“@userid”,key)

};

DBHelper.ExecuteCommand(sbSql.ToString(), param);

}

}

//重新绑定

Bind();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154639.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言位运算符解释_c语言逻辑关系运算符

    c语言位运算符解释_c语言逻辑关系运算符      位操作是程序设计中对位模式按位或二进制数的一元和二元操作,在许多古老的微处理器上,位运算比加减运算略快,通常位运算比乘除法运算要快很多。按位取反:~’~’是一元运算符,用来对一个二进制数按位取反,把0变为1,把1变为0。如下例子所示。…

    2022年10月4日
    1
  • 如何理解python报错信息_csb报错

    如何理解python报错信息_csb报错#软件版本python3.7pycharm2018.3.1遇到的问题解释及处理方法#1报错#TypeError:‘key’isaninvalidkeywordargumentforprint()代码:def_cmp(x,y):ifx&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;y:return-1ifx&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;y:return

    2022年8月28日
    0
  • java 事务嵌套_Java事务以及嵌套事务[通俗易懂]

    java 事务嵌套_Java事务以及嵌套事务[通俗易懂]最近遇到事务的处理,嵌套事务,自己研究,整理一下。1先看结论1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。2、如果事务中存在异常,只要对异常进行捕获和处理,都为执行成功,否则都不会执行成功。2Propagation取值REQUIRED(默认值):在有transaction状态下执行;如当前没有transaction,则创建新的transaction;SUPPO…

    2022年10月10日
    0
  • webstorm 永久激活方法【2021免费激活】

    (webstorm 永久激活方法)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~3S…

    2022年3月30日
    64
  • 在laravel框架中使用ajax请求报错419

    在laravel框架中使用ajax请求报错419

    2021年10月27日
    39
  • 中国Java培训机构09年度排行榜

    中国Java培训机构09年度排行榜 中国Java培训机构09年度排行榜 本站是个人网站, 因此排名标准是按照本人的个人感觉而定. 此排名的顺序主要依据:办学规模,在校人数,师资稳定度(全职讲师人数),口碑,视频好评度等.受经济危机影响,目前的总趋势是学费略有降低,但就业较难,起薪很低.建议有意参加者先看各类免费视频入门,并接触从各个培训学校毕业的…

    2022年10月3日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号