文档库

最新最全的文档下载
当前位置:文档库 > .net GridView 常用用法

.net GridView 常用用法

GridView 常用用法

这篇日志有点长,收集了一些网上的资源,同志们可以按需要选择来看。目录是这样的:这个颜色的是笨猫的注释

·GridView的常用用法总结

·如何获取GridView 编辑状态下单元格里的值

先叙述一下我碰到问题的:

道路表road:roadid,roadname,startjunid,endjunid

路口表junction:junid,junname

startjunid,endjunid存的是int型编号,显示时要显示junname路口名字,于是做了一个视图view_road_junction

现在用一GridView和view_road_junction绑定显示数据。同时要求能对数据进行修改,变动反应到road表中。

我的做法是:

因为是视图,不能直接用GridView自动生成的编辑功能(已经用不同方法尝试过,不行,偷懒不成功),所以写了一个OnRowUpdating事件,GridView1_RowUpdating(),在此函数中获取GridView在编辑状态下的单元格的值,对road表进行更新操作。点击页面上的"编辑"按钮的时候触发该事件。

------------------

GridView的常用用法总结

------------------

GridView七种类型字段

.net GridView 常用用法

.net GridView 常用用法

ImageUrl当按钮形式为Image时,指定Image所在的Url

CommandName单击ButtonField按钮时所要运行的命令名称

相关事件:

当ButtonField按钮字段被按下时,GridView控件会引发RowCommand事件,

若要判断引发命令事件之数据行的索引,请使用事件自变量的CommandArgument属性,会将该事件自变量传递至数据绑定控件的命令事件,ButtonField类会自动用适当的索引值填入CommandArgument属性。在事件响应函数中可以根据不同的CommandName来做不同的操作。

从事件中判断http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandName和对第几行进行的操作http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandArgument。Example:

if (http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandName == "Select")

{

int index = Convert.ToInt32(http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandArgument);

}

}

CommandField:

五种命令:Select、Edit、Update、Delete与Insert。显示及隐藏命令按钮您可以设置ShowDeleteButton、ShowEditButton、ShowInsertButton与ShowSelectButton这几个属性(True或False)。而设置不同命令按钮的文字标题可用的属性有SelectText、InsertText、UpdateText、DeleteText、CancelText、EditText、NewText。

若您将ButtonType属性设为ButtonType.Image,则可以设置按钮的图像Url属性,可供使用的有CancelImageUrl、DeleteImageUrl、EditImageUrl、InsertText、NewImageUrl、SelectImageUrl、 UpdateImageUrl。

SelectedRowStyle 用于设置选中行的风格

相关事件:

RowEditing

RowDeleting

RowUpdating

RowCancelingEdit

注意:RowEditing和RowUpdating的不同

Example:(摘自:http://www.wendangku.net/doc/195fcf6858fafab069dc0242.html/70zz)

后台代码:

你可以使用sqlhelper,本文没用。代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page

{

//清清月儿http://www.wendangku.net/doc/195fcf6858fafab069dc0242.html/21aspnet

SqlConnection sqlcon;

SqlCommand sqlcom;

string strCon = "Data Source=(local);Database=数据库名;Uid=帐号;Pwd=密码"; protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

bind();

}

}

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {

GridView1.EditIndex = e.NewEditIndex;

bind();

}

//删除

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

string sqlstr = "delete from 表 where id='" +

GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

sqlcon = new SqlConnection(strCon);

sqlcom = new SqlCommand(sqlstr,sqlcon);

sqlcon.Open();

sqlcom.ExecuteNonQuery();

sqlcon.Close();

bind();

}

//更新

//gridview的列、行都是从0开始编号的

//我在用“GridView1.DataKeys[e.RowIndex].Value.ToString()”老是报“索引超出范围“,不知原因。

//建议改用后文写的”如何获取GridView 编辑状态下单元格里的值“的方法

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

sqlcon = new SqlConnection(strCon);

string sqlstr = "update 表 set 字段1='"

+

((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().T rim() + "',字段2='"

+

((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().T rim() + "',字段3='"

+

((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().T rim() + "' where id='"

+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";

sqlcom=new SqlCommand(sqlstr,sqlcon);

sqlcon.Open();

sqlcom.ExecuteNonQuery();

sqlcon.Close();

GridView1.EditIndex = -1;

bind();

}

//取消

protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

{

GridView1.EditIndex = -1;

bind();

}

//绑定

public void bind()

{

string sqlstr = "select * from 表";

sqlcon = new SqlConnection(strCon);

SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);

DataSet myds = new DataSet();

sqlcon.Open();

myda.Fill(myds, "表");

GridView1.DataSource = myds;

GridView1.DataKeyNames = new string[] { "id" };//主键

GridView1.DataBind();

sqlcon.Close();

//若在页面配置了数据源SqlDataSource1,用下2行代码,不过在页面里不要加SqlDataSourceID=SqlDataSource1属性了

//GridView1.DataSource = SqlDataSource1;

//GridView1.DataBind();

}

}

前台主要代码:

... ...

ForeColor="#333333" GridLines="None"

OnRowDeleting="GridView1_RowDeleting"

OnRowEditing="GridView1_RowEditing"

OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit">

ShowSelectButton="True" />

ShowEditButton="True" />

CheckBoxField:

DataField设置绑定至数据源的字段名称

Text设置CheckBox右侧的说明文字

ReadOnly在编辑模式时,设置ReadOnly属性可以防止被编辑

HyperLinkField

DataTextField绑定数据源字段显示成超链接文字

DataNavigateUrlFields将数据字段绑定到超链接字段Url属性

Target如果设置为"_blank"表示在空白页中打开

ImageField

DataImageUrlField设置绑定至ImageField对象ImageUrl属性的数据源字段名称

TemplateField

ItemTemplate字段项目模板

AlternatingItemTemplate字段交替项目模板,若设置这个字段后,奇数行会显示ItemTemplate,偶数行显示AlternatingItemTemplate

EditItemTemplate编辑项目模板

其他常见用法

1 程序中动态设置表头名称

gv.Columns[0].HeaderText=”表头”;

2 修改时获取文本控件上的文本

string card=((TextBox)CellGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text;

获得其他类型的控件同理,将上面代码的控件类型做修改即可

3 在每一行绑定数据时,会发生RowDataBound事件,可在这里添加相应的事件响应函数

4 删除之前提示是否确定删除:

在RowDataBound事件中加入该代码

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

{

((CheckBox)e.Row.FindControl("CheckBox1")).Attributes.Add("onclick","return confirm('XXX')");

}

5AutoGenerateColumns是否自动添加列,如果是的话意味着是通过程序代码来实现添加的

分页的实现

关键属性:

AllowPaging设置为"True"

PageSize设置每一行显示的行数

Mode分页样式,包含这四种:NextPreviousFirstLast、NumericFirstLast、NextPrevious、Numeric(Numeric指显示数字;First、Last指最开始和最后一个;Next、Previous指上一个和下一个)

FirstPageImageUrl、LastPageImageUrl、NextPageImageUrl、PreviousPageImageUrl 分别指对应的图片

PagerStyle 中HorizontalAlign、VerticalAlign、BorderStyle用于设置分页控制的样式

关键事件

OnPageIndexChanging分页事件

当发生该事件后,重新绑定数据源

Example:

ArticleList.PageIndex = e.NewPageIndex;

if (Session["SQLStr"] != null)

{

string SQLStr = Session["SQLStr"].ToString();

GirdViewRefresh(SQLStr);

}

典型使用步骤:

添加GridView控件,设置相关属性:

Columns中添加相应的数据行

RowStyle、AlternatingRowStyle设置数据行样式

分页设置AllowPaging="True";PageSize设置每页好显示的行数

SelectedRowStyle 设置选择行的样式

在CS文件添加相应的响应函数:

(1)Page_Load中绑定数据源:

ArticleList.DataSource = ds.Tables[0].DefaultView;

ArticleList.DataBind();

(2)OnPageIndexChanging中更新页索引,重新绑定数据源

ArticleList.PageIndex = e.NewPageIndex;

if (Session["SQLStr"] != null)

{

string SQLStr = Session["SQLStr"].ToString();

GirdViewRefresh(SQLStr);

}

(3)RowCommand加入事件响应

if (http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandName == "Select")

{

int index = Convert.ToInt32(http://www.wendangku.net/doc/195fcf6858fafab069dc0242.htmlmandArgument);

}

}

----------------------

如何获取 GridView 编辑状态下单元格里的值

----------------------

还在使用这样的代码吗?

var txtName = grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName") as TextBox;

if (txtName != null)

{

// 读取值

.net GridView 常用用法

//

}

其实这些工作(在单元格中查找控件,并尝试获取其中的值)已经被封装了。现在,只要调用ExtractValuesFromCell方法即可。

而该方法也被很多种列类型所支持:

DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField

你可以在GridView 的RowUpdating, RowDeleting 等事件中使用它。利用该方法,可以将值提取到所需的字典里去,然后再从字典中读取。这些字典包括:e.Keys, e.NewValues, e.OldValues 等。

一小段例子代码:

// 更新

protected void grid1_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

var row = grid1.Rows[e.RowIndex];

// 提取 Id 字段的值

grid1.Columns[0].ExtractValuesFromCell(

e.Keys,

row.Cells[0] as DataControlFieldCell,

DataControlRowState.Edit,

true/* include readonly */);

// 提取 Name 字段的值

grid1.Columns[1].ExtractValuesFromCell(

e.NewValues,

row.Cells[1] as DataControlFieldCell,

DataControlRowState.Edit,

true/* include readonly */);

var id = int.Parse(e.Keys["id"].ToString());

var name = (string) e.NewValues["name"];

// 执行相关的数据库更新操作

.net GridView 常用用法

//

}

这样,在大多数场合我们可以尽可能多的使用BoundField,并且也能正确读取到其编辑时的值,省下自定义TemplateField 的一堆代码了。