gridview使用方法

 
  
gridview 事件学习:
一、事件说明
1 .1RowCommand
在 GridView 控件中单击某个按钮时发生。此事件通常用于在该控件中单击某个按钮时执行某项任务。
1 .2PageIndexChanging
在单击页导航按钮时发生,但在 GridView 控件执行分页操作之前。此事件通常用于取消分页操作。
1 .3PageIndexChanged
在单击页导航按钮时发生,但在 GridView 控件执行分页操作之后。此事件通常用于在用户定位到该控件中不同的页之后需要执行某项任务时。
1 .4SelectedIndexChanging
在单击 GridView 控件内某一行的 Select 按钮(其 CommandName 属性设置为“Select”的按钮)时发生,但在 GridView 控件执行选择操作之前。此事件通常用于取消选择操作。
1 .5SelectedIndexChanged
在单击 GridView 控件内某一行的 Select 按钮时发生,但在 GridView 控件执行选择操作之后。此事件通常用于在选择了该控件中的某行后执行某项任务。
1 .6Sorting
在单击某个用于对列进行排序的超链接时发生,但在 GridView 控件执行排序操作之前。此事件通常用于取消排序操作或执行自定义的排序例程。
1 .7Sorted
在单击某个用于对列进行排序的超链接时发生,但在 GridView 控件执行排序操作之后。此事件通常用于在用户单击对列进行排序的超链接之后执行某项任务。
1 .8RowDataBound
在 GridView 控件中的某个行被绑定到一个数据记录时发生。此事件通常用于在某个行被绑定到数据时修改该行的内容。
1 .9RowCreated
在 GridView 控件中创建新行时发生。此事件通常用于在创建某个行时修改该行的布局或外观。
1 .10RowDeleting
在单击 GridView 控件内某一行的 Delete 按钮(其 CommandName 属性设置为“Delete”的按钮)时发生,但在 GridView 控件从数据源删除记录之前。此事件通常用于取消删除操作。
1 .11RowDeleted
在单击 GridView 控件内某一行的 Delete 按钮时发生,但在 GridView 控件从数据源删除记录之后。此事件通常用于检查删除操作的结果。
1 .12RowEditing
在单击 GridView 控件内某一行的 Edit 按钮(其 CommandName 属性设置为“Edit”的按钮)时发生,但在 GridView 控件进入编辑模式之前。此事件通常用于取消编辑操作。
1 .13RowCancelingEdit
在单击 GridView 控件内某一行的 Cancel 按钮(其 CommandName 属性设置为“Cancel”的按钮)时发生,但在 GridView 控件退出编辑模式之前。此事件通常用于停止取消操作。
1 .14RowUpdating
在单击 GridView 控件内某一行的 Update 按钮(其 CommandName 属性设置为“Update”的按钮)时发生,但在 GridView 控件更新记录之前。此事件通常用于取消更新操作。
1 .15RowUpdated
在单击 GridView 控件内某一行的 Update 按钮时发生,但在 GridView 控件更新记录之后。此事件通常用来检查更新操作的结果。
1 .16DataBound
此事件继承自 BaseDataBoundControl 控件,在 GridView 控件完成到数据源的绑定后发生。

二、获得主键
首先我们为 Gridview 增加一个新的空白列,如下:
< asp:BoundField HeaderText = " 序号 " >
< ItemStyle HorizontalAlign = " Center " Width = " 26px " />
</ asp:BoundField >
在 GridView RowDataBound 事件中编写代码,如下:
protected void RowDataBond1( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex > - 1 )
{

e.Row.Cells[
0 ].Text = Convert.ToString(e.Row.RowIndex + 1 );
}

}
这样就会有一个自动编号的列出来了,那么我们要对某一列进行操作的时候就不能用cells[
0 ].text的方法了,那样得到的ID号和数据库里的并不对应,所以我们要用主键的方法,我们首先在GridView的属性中的DataKeyNames里面写上我的的表主键,然后在到方法里用语句把这个值取出来,我们就知道用户是要对哪一列进行操作了,下面写出了几个在事件中取出主键值的方法,以供参考。
我们最常用的,当然就是RowDataBound方法了
在 GridView1_RowDataBound中获取主键的值
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
int index = GridView1.DataKeys[e.Row.RowIndex].Value;
}
其次就是删除事件
在 GridView1_RowDeleting中获取主键的值
protected void GridView1_RowDeleting( object sender, GridViewDeleteEventArgs e)
{
int index = GridView1.DataKeys[e.RowIndex].Value;
}
分页事件
在 GridView1_PageIndexChanging中获取主键的值
protected void GridView1_PageIndexChanging( object sender, GridViewPageEventArgs e)
{
int index = GridView1.DataKeys[e.NewPageIndex].Value;
}
还有其它几个不常用的:
在 GridView1_RowCommand中获取主键的值:
protected void GridView1_RowCommand( object sender, GridViewCommandEventArgs e)
{
int index = GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
}
在 GridView1_RowEditing中获取主键的值
protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e)
{
int index = GridView1.DataKeys[e.NewEditIndex].Value;
}
在 GridView1_RowUpdating中获取主键的值
protected void GridView1_RowUpdating( object sender, GridViewUpdateEventArgs e)
{
int index = GridView1.DataKeys[e.RowIndex].Value;
}
三 事件
3.1 .RowCommand 事件
当ButtonField按钮字段被按下时,GridView控件会引发RowCommand事件,
若要判断引发命令事件之数据行的索引,请使用事件自变量的CommandArgument属性,会将该事件自变量传递至数据绑定控件的命令事件,ButtonField类会自动用适当的索引值填入CommandArgument属性。在事件响应函数中可以根据不同的CommandName来做不同的操作。
从事件中判断e.CommandName和对第几行进行的操作e.CommandArgument。
前台页面
< asp:TemplateField HeaderText = " 操作 " >
< ItemTemplate >
// 删除操作
< asp:ImageButton runat = " server " ImageUrl = " ../images/delete_16x16.gif "
Style
= " position: relative " CommandArgument = ' <%#Eval("product_id") %> ' CommandName = " del " OnClientClick = " return confirm('确认删除这条单据吗?') " />& nbsp;
// 超链接
< a href = " addXuni.aspx?id=<%#Eval( " product_id " ).ToString()%>&modify=1 " >
// 绑定图片 <img src="../images/edit_16x16.gif" border="0" /></a>
</ ItemTemplate >
</ asp:TemplateField >
后台代码:
protected void GridView1_RowCommand( object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == " del " )
{
int index = Convert.ToInt32(e.CommandArgument);
Boolean flag
= CardInfoListManager.DeleteCardInfoListById(index);
if (flag == true )
{
this .ClientScript.RegisterStartupScript( this .GetType(), "" , " <script>alert('删除成功!')</script> " );
Bind();
}
}
}
3.2 .RowDataBound事件
3.2 . 1 . Cells[x].Txt。
从列单元格的文本值获取。这种方法简单高率,最为常用,但是功能单纯。此法存在几个缺点:
1 )无法获取到设置了隐藏属性的数据列的值,所取到的值为“”(空)。
2 )只能获取在HTML中定义过的数据列,无法查询数据源中的当前数据行的所有字段列。一般情况下,通过HTML设置GridView的字段列的数量往往小于数据源的实际字段数量,这是因为从业务逻辑的角度看,并不是所有的字段都是要显示在页面上的。当需要使用没有被显示的字段时,此法就不能直接满足需求了。

3.2 . 2 . e.Row.Cells[x].FindControl( " YourcontrolName " )。
这是在单元格内查找某个服务器控件,从而获得其数据值。这种方式可以操作单元格内的服务器控件。此法一般用于处理模板列中的数据或控件。

3 . (DataRowView)e.Row.DataItem).Row.ItemArray[x].ToString()。
此法的核心是e.Row.DataItem,它是GridView的行数据集,为Object类型,将其转化为DataRowView类型后,可以获得更多的操作方法。此数据集表示数据源当前行的全部字段列,ItemArray[x]是当前行全部字段列的数组对象,可以通过索引x获得任意字段值。此法的强悍之处是可以对数据源的全部字段查询。

4 . DataBinder.Eval(e.Row.DataItem, " YourDataFieldName " ).ToString()。
此法仍然基于e.Row.DataItem,其特点是更快捷的获得数据源的任意字段值,因为使用了DataBinder.Eval(),需要注意的是不要写错字段名称。
5 . 将e.Row.DataItem转化为自定义类型,实现数据类型化。
例如:
DSRequestTracking.TB_RequestTrackingRow rtrow
= (DSRequestTracking.TB_RequestTrackingRow)((DataRowView)e.Row.DataItem).Row;
RequestStatusDropDownList1.SelectedValue
= rtrow.StatusID.ToString();
其中DSRequestTracking是通过DSRequestTracking.xsd文件在工程中自定义的强类型DataSet, TB_RequestTrackingRow是VS自动为此强类型生成的创建数据行对象的方法。通过此法,实现了类型化数据的广泛应用。数据类型化的好处很多,显而易见的便是传一个类型数据给方法,取代一大堆参数,另外就是再也不会发生字段名拼写错误的情况。
RowDataBound事件是gridview绑定数据源时,可以自定每列的样式,背景颜色,绑定需要格式化的数据,进行绑定的判断。
常用的有:
// 设置鼠标经过第一行的背景颜色
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add(
" onmouseover " , " c=this.style.backgroundColor;this.style.backgroundColor='#f2ffe3' " );

e.Row.Attributes.Add(
" onmouseout " , " this.style.backgroundColor=c " );
e.Row.Attributes[
" style " ] = " Cursor:hand " ;
}
}
// 对数据源上的数据进行格式化

if (e.Row.RowType == DataControlRowType.DataRow)
{
switch (e.Row.Cells[ 3 ].Text.Trim())
{
case " 0 " :
e.Row.Cells[
3 ].Text = " 跟单员 " ;
break ;
case " 1 " :
e.Row.Cells[
3 ].Text = " 采购员 " ;
break ;
}
3 .假如有这样一个判断,一个“审核”状态,一个“未审核”状态。在同一个gridview中,能过“审核”的,则他的操作按钮为“取消审核”,”未审核“ 数据的操作按钮为“通过审核”。这样需要在绑定的时候进行判断。
前台页面
< asp:TemplateField HeaderText = " 操作 " >
< ItemTemplate >
< asp:Button runat = " server " visibile = false text = " 操作 " />
< asp:Button runat = " server " visibile = " false: text= " 操作 " />
</ ItemTemplate >
</ asp:TemplateField >
后台代码:
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// 数据源读取数据为1的为“通过审核”0“未审核”
if (DataBinder.Eval(e.Row.DataItem, " YourDataFieldName " ).ToString() == " 1 " )
{
Button bt
= e.row[
}
}
}
3.2 . 3 GridView.RowEditing 事件
此事件发生在单击某一行的“编辑”按钮以后, GridView 控件进入编辑模式之前

(此事件可以处理在点击“编辑”之后,在进行“更新”“取消”操作之前可以干一些活,例如,在进行编辑时,要求某一列上的编辑功能,注册一些脚本,事填加一些,编辑时的特效功能。例如,编辑某一列,时加入“js时间控件”,
protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e)
{
// 这两行是最常用的。
GridView1.EditIndex = e.NewEditIndex;
Bind();
// 这里是不常用的,这是例用了My97DatePicker这个JS控件,使某一列的编辑文本,出现时间控件。
TextBox tb = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl( " TextBox1 " );
ViewState[
" vdtime " ] = tb.Text;
tb.Attributes.Add(
" onclick " , " WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'}) " ) ;
}
(注:在进行编辑时,一般的都是编辑某一行的数据,如果只想编辑某一行某一列的值,就把其它列设置成“
readonly ”只读型,就可以了,一般适应, < asp:buttonFiled > 这个,便不适合模板)
3.2 . 4 GridView.RowCancelingEdit 事件
单击编辑模式中某一行的“取消”按钮以后,在该行退出编辑模式之前发生
(注:
单击编辑模式中某一行的“取消”按钮以后,将引发 RowCancelingEdit 事件,但在该行退出编辑模式之前。允许您提供以下事件处理方法,即只要发生此事件就执行一个自定义例程,如:如果取消操作将行置于不希望有的状态,则停止该操作。
GridViewCancelEditEventArgs 对象将被传递给事件处理方法,以便您可以确定当前行的索引,还可以指示应停止取消操作。若要停止取消操作,请将 GridViewCancelEditEventArgs 对象的 Cancel 属性设置为
true 。)
例:
protected void GridView1_RowCancelingEdit( object sender, GridViewCancelEditEventArgs e)
{
// 经常用的。
GridView1.EditIndex = - 1 ;
Bind();
}
3.2 .5GridView.RowUpdating 事件
发生在单击某一行的“更新”按钮以后, GridView 控件对该行进行更新之前
例:
前台页面
< asp:TemplateField HeaderText = " 充值时间 " >
< EditItemTemplate >
< asp:TextBox ID = " TextBox1 " runat = " server " Text = ' <%# Bind("cztime", "{0:yyyy-MM-dd HH:mm:ss}") %> ' ></ asp:TextBox >
</ EditItemTemplate >
< ItemStyle Width = " 120px " />
< ItemTemplate >
< asp:Label ID = " Label1 " runat = " server " Text = ' <%# Bind("cztime", "{0:yyyy-MM-dd HH:mm:ss}") %> ' ></ asp:Label >
</ ItemTemplate >
</ asp:TemplateField >
后台代码:
protected void GridView1_RowUpdating( object sender, GridViewUpdateEventArgs e)
{
// 获得第4列上的文本值。
string str = (GridView1.Rows[e.RowIndex].Cells[ 4 ].FindControl( " TextBox1 " ) as TextBox).Text;
// 获得主键值 (要设置GridView属性中的DataKeyNames="id"这个属性,ID)
string str1 = GridView1.DataKeys[e.RowIndex].Value.ToString();
// 更新操作
GridView1.EditIndex = - 1 ;
Bind();
}
3.1 . 6 GridView.PageIndexChanging 事件
在单击某一页导航按钮时,但在 GridView 控件处理分页操作之前发生
在手动给Gridview邦定数据源时(不是前台利用DataSource控件绑定),会出现这种情况:
运行后直接显示分页的1,只有1显示正常,如果点选其它的,比如2或者4什么其它别的,提示:
GridView“XXX”激发了未处理的事件“PageIndexChanging”。
手动分页必须有PageIndexChanging事件,添加PageIndexChanging事件,然后添加如下代码
例:
protected void GridView1_PageIndexChanging( object sender, GridViewPageEventArgs e)
{
// 经常用到的。
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
3.1 .7GridView.RowCreated 事件
在 GridView 控件中创建行时发生。
RowCreated 与RowDataBound比较
GridView的RowCreated与RowDataBound的一个区别在于RowCreated事件是这样的,不管数据是不是重新绑定到GridView,只要在GridView里新增一行记录就将引发RowCreated事件。那意味着,当发生PostBack回传事件时,哪怕数据来自视图状态,也会引发RowCreated事件。
我们使用RowCreated事件而不使用RowDataBound事件的原因在于,只有当数据明确的绑定到数据Web控件时才会引发RowDataBound事件

转载于:https://www.cnblogs.com/xulei123/archive/2011/05/12/2044859.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GridView是Android中常用的布局控件之一,用于在屏幕上展示多行多列的数据,类似于网格的形式。下面是GridView使用方法: 1. 在布局文件中添加GridView控件 ```xml <GridView android:id="@+id/grid_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="3" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:padding="10dp" android:columnWidth="100dp" /> ``` 其中`numColumns`属性表示每行显示的列数,`verticalSpacing`和`horizontalSpacing`属性表示网格之间的垂直和水平间距,`padding`属性表示GridView的内边距,`columnWidth`属性表示每个网格的宽度。 2. 创建适配器Adapter GridView需要一个适配器来提供数据,可以使用ArrayAdapter或BaseAdapter。这里以BaseAdapter为例: ```java public class MyAdapter extends BaseAdapter { private Context mContext; private List<String> mData; public MyAdapter(Context context, List<String> data) { this.mContext = context; this.mData = data; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.grid_item, null); holder = new ViewHolder(); holder.textView = convertView.findViewById(R.id.text_view); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(mData.get(position)); return convertView; } static class ViewHolder { TextView textView; } } ``` 适配器中重写了BaseAdapter的四个方法,其中`getView()`方法用于设置每个网格的内容。 3. 设置适配器Adapter 在Activity或Fragment中设置适配器: ```java GridView gridView = findViewById(R.id.grid_view); List<String> data = new ArrayList<>(); data.add("Item 1"); data.add("Item 2"); data.add("Item 3"); data.add("Item 4"); MyAdapter adapter = new MyAdapter(this, data); gridView.setAdapter(adapter); ``` 运行程序即可看到GridView中展示了四个网格,每个网格中显示了对应的文本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值