视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET使用gridview获取当前行的索引值
2020-11-27 22:38:30 责编:小采
文档


在用GridView控件时,我们经常会碰到获取当前行的索引,通过索引进行许多操作。例如,可以获得当前行某一个控件元素;设置某一元素的值等等。下面结合实例介绍几种获得GridView当前行索引值的方法。

实例:
① 目的:获取GridView中RowCommand的当前索引行。
② 前台页面:在GridView中添加一模版列,里面添加一个LinkButton控件。
代码:

<asp:TemplateField HeaderText="操作"> 
<ItemTemplate> 
<asp:LinkButton ID="lbtnQianRu" runat="server" CommandName="QianRu" 
CommandArgument='<%# Eval("Id") %>'>签入</asp:LinkButton> 
<asp:LinkButton ID="lbtnQianChu " runat="server" CommandName="QianChu">签出 </asp:LinkButton> 
</ItemTemplate> 
</asp:TemplateField> 

小提示:如果在后台代码中用e.CommandArgument取值的话,前台代码就必须在按钮中设置CommandArgument的值,值为绑定的数据库字段。如:
//因为在客户端中就已经将LinkButton的CommandArgument与主键Id给绑定了所以在此可以直接用e.CommandArgument得出主键ID的值
int id = Convert.ToInt32(e.CommandArgument.ToString());
③ 在GridView里已经设置了LinkButton为事件处理按钮,将通过以下方法获取索引:

protected void gv_Company_RowCommand(object sender, GridViewCommandEventArgs e){ 
if (e.CommandName == "QianRu") 

{ 

【方法一】

GridViewRow drv = ((GridViewRow)(((LinkButton)(e.CommandSource)).Parent.Parent)); //此得出的值是表示那行被选中的索引值 
inf id=Convert.ToInt32(GridView1.DataKeys[drv.RowIndex].Value); //此获取的值为GridView中绑定数据库中的主键值 

注意:运用此方法,需要对GridView的DataKeyNames属性进行设置,此例中设置为主键字段。

【方法二】

GridViewRow drv = (GridViewRow)((LinkButton)e.CommandSource).NamingContainer;//此得出的值是表示那行被选中的索引值 
int id = Convert.ToInt32(GridView1.Rows[drv.RowIndex].Cells[0].Text); //此获取的值为GridView中绑定数据库中的主键值,取值方法是选中的行中的第一列的值,drv.RowIndex取得是选中行的索引 
} 
} 

此外,还有一些方法可以实现获得当前行索引值。

【方法三】

在linkbutton控件的Command事件,利用sender的Parent获取GridView中的当前行。

protected void lbtnQianChu_Command(object sender, CommandEventArgs e) 
{ 
LinkButton lb = (LinkButton)sender; 
DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent; 
GridViewRow gvr = (GridViewRow)dcf.Parent; //此得出的值是表示那行被选中的索引值 
lbtnQianChu.SelectedIndex = gvr.RowIndex; 
} 

【方法四】

在linkbutton控件的Click事件,获取GridView中的当前行。

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
//行号 
int row = ((GridViewRow)((LinkButton)sender).NamingContainer).RowIndex; 
} 

【方法五】

如果在模板列中添加一下DropDownList控件,并开启其AutoPostback属性,在DropDownList 的SelectedIndexChanged事件中,获取GridView中的当前行。

下面是SelectedIndexChanged事件的代码摘要:

DropDownList ddl = (DropDownList)sender; 
GridViewRow gvr = (GridViewRow)ddl.NamingContainer; 
int id = int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString()); 
int num = int.Parse(ddl.Text); 

第一句用来获取触发事件的DropDownList控件。
第二句就利用该控件的NamingContainer属性,获取其容器,也就是GridViewRow对象。
提示:由于DropDoweList与button不同,无法指定其CommandName,所以,通过用NamingContainer属性来解决问题。
先来看看微软对该NamingContainer属性的解释:
获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 Control.ID 属性值的服务器控件。
ASP.NET Web 应用程序的每一页均包含控件的层次结构。此层次结构与控件是否生成用户可见的 UI 无关。给定控件的命名容器是层次结构中该控件之上的父控件,此父控件实现 INamingContainer 接口。实现此接口的服务器控件为其子服务器控件的 ID 属性值创建唯一的命名空间。

当针对列表 Web 服务器控件(如 Repeater 和 DataList 服务器控件)进行数据绑定时,为服务器控件创建唯一的命名空间尤其重要。当数据源中的多个项创建服务器控件的多个实例,且该服务器控件是重复控件的子级时,命名容器确保这些子控件的每个实例具有不冲突的 UniqueID 属性值。页的默认命名容器是请求该页时生成的 Page 类的实例。
可以使用此属性确定特定服务器控件所在的命名容器。

【方法六】

如果模板列中有CheckBox控件的情况,通过CheckBox1_CheckedChanged事件中,获取GridView中的当前行。

CheckBox chk = (CheckBox)sender; 
DataControlFieldCell dcf = (DataControlFieldCell)chk.Parent; 
GridViewRow gvr = (GridViewRow)dcf.Parent; 

【方法七】

<asp:GridView ID="gvTest" runat="server"> 
<Columns> 
<asp:TemplateField> 
<ItemTemplate> 
DisplayIndex : <%# Container.DisplayIndex %> || DataItemIndex : <%# Container.DataItemIndex %><br /> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 

【方法八】

控件的ID和Name命名可以如上方法,我需要通过RowCommand()方法判断选中的是哪一列,而要使用这个方法的前提是,e.CommandArgument这么一个属性(首先必须知道在GridView里,行索引是被放在CommandArgument里面的),现在的任务就是获得这么一个属性。查资料可以知道,在创建GridView控件中每一行时,都将引发一个RowCreated事件,借此这么个方法,可以把linkButton所选择的行号写入CommandArgument中。

protected void gvInfo_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
LinkButton lk1 = (LinkButton)e.Row.FindControl("lkbtn");//LinkButton的ID 
lk1.CommandArgument = e.Row.RowIndex.ToString(); 
} 
} 
protected void gvInfo_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
if (e.CommandName == "ADD")//我LinkButton的CommandName 
{ 
int index = Convert.ToInt32(e.CommandArgument); 
string aa = gvInfo.Rows[index].Cells[1].Text.ToString();//获取当前行列号为一的值,列号从0开始 
} 
} 

以上所述就是本文的全部内容了,希望大家能够喜欢。

下载本文
显示全文
专题