ASP.NET整理:GridView,基本用法…
2013-02-22 15:46
676 查看
十七.GridView
一.基础部分
分页:只有用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------------>GridView的RowCommand事件
CommandName:区分是哪个按钮-->e.CommandName,用于获取命令名
另外如果有“列”不想被修改,可以设置其readonly属性true
3.HyperLinkField
属性:
DataNavigatorUrlFormatString:设置url:detail.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 price,object 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 sender,EventArgs 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();
我的更多文章:
ASP.NET整理:GridView,基本用法,高级用法,分页
(2012-09-08 13:09:19)
ASP.NET整理:DrpDownList,用法,动态添加(2012-09-08 13:09:05)
ASP.NET整理:DataList分页PagedDataSource
(2012-09-08 13:04:14)
ASP.NET整理:用户登录和注册的参考方法(2012-09-08 12:54:54)
ASP.NET整理:TreeView
(2012-09-08 12:52:01)
ASP.NET整理:站点地图,验证码,验证控件,母板,动态脚本(2012-09-08 12:48:53)
ASP.NET整理:Cookie,Application,Session,页面生命周期(2012-09-08 12:46:40)
ASP.NET:就抽象工厂模式的一些说明(图文并茂,举例说明)
(2012-09-03 20:54:24)
ASP.NET:JQuery控制下的标签页效果
(2012-09-02 12:48:05)
UploadFile控件用法(着重说明文件夹的自定义创建)
(2012-07-26 15:42:32)
相关文章推荐
- ASP.NET整理:GridView,基本用法,高级用法,分页
- ASP.NET中的三个富数据控件:GridView,Repeater,DataList的基本用法
- ASP.net GridView基本用法
- asp.net 获取Gridview隐藏列的值 整理中
- ASP.NET中GridView、DataList、DataGrid三个数据控件foreach遍历用法示例
- ASP.NET中Response的基本用法
- ASP.NET中的验证相关知识 及 Login 控件的基本用法
- .net面试基本问题四 ASP.Net页面事件执行顺序 (网络整理)
- asp.net中GridView编辑,更新,合计用法示例
- asp.net GridView 用法详解
- 水晶报表asp.net的webform下基本用法实例
- .net面试基本问题一 ASP.Net七大内置对象 (网络整理)
- Asp.Net MVC 2.0 Filter基本用法
- DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件
- ASP.NET AjaxControlToolkit 的基本用法
- ASP.NET GridView 的各种用法(2)
- 在asp.net webform中的 gridview 里面的一些基本操作
- ASP.NET Dictionary 的基本用法
- 【ASP.NET】演绎GridView基本操作事件
- Asp.net 中GridView各种用法