ASP.NET GridView RowIndex作为CommandArgument

如何访问和显示一个gridview项目的行索引作为buttonfield列button中的命令参数?

<gridview> <Columns> <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument=" ? ? ? " /> ..... 

这是一个非常简单的方法:

 <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument='<%# Container.DataItemIndex %>' /> 

MSDN说:

ButtonField类自动使用适当的索引值填充CommandArgument属性。 对于其他命令button,您必须手动设置命令button的CommandArgument属性。 例如,当GridView控件没有启用分页时,可以将CommandArgument设置为<%#Container.DataItemIndex%>。

所以你不需要手动设置。 GridViewCommandEventArgs的行命令将使其可访问; 例如

 protected void Whatever_RowCommand( object sender, GridViewCommandEventArgs e ) { int rowIndex = Convert.ToInt32( e.CommandArgument ); ... } 

这里是微软build议这个http://msdn.microsoft.com/en-us/library/bb907626.aspx#Y800

在gridview上添加一个命令button并将其转换为模板,然后在这种情况下给它一个命令名“ AddToCart ”,并添加CommandArgument “<%#((GridViewRow)Container).RowIndex%>”

 <asp:TemplateField> <ItemTemplate> <asp:Button ID="AddButton" runat="server" CommandName="AddToCart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" Text="Add to Cart" /> </ItemTemplate> </asp:TemplateField> 

然后,在GridView的RowCommand事件上创build“AddToCart”命令时触发,并从那里做任何你想做的事情

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "AddToCart") { // Retrieve the row index stored in the // CommandArgument property. int index = Convert.ToInt32(e.CommandArgument); // Retrieve the row that contains the button // from the Rows collection. GridViewRow row = GridView1.Rows[index]; // Add code here to add the item to the shopping cart. } } 

**我犯的一个错误是我想在模板button上添加这些动作,而不是直接在RowCommand事件上执行。

我认为这将工作。

 <gridview> <Columns> <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit" Visible="True" CommandArgument="<%# Container.DataItemIndex %>" /> </Columns> </gridview> 
 void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { Button b = (Button)e.CommandSource; b.CommandArgument = ((GridViewRow)sender).RowIndex.ToString(); } 

我通常使用GridView的RowDatabound事件绑定这些数据:

 protected void FormatGridView(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { ((Button)e.Row.Cells(0).FindControl("btnSpecial")).CommandArgument = e.Row.RowIndex.ToString(); } } 
 <asp:TemplateField HeaderText="" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:LinkButton runat="server" ID="lnkAdd" Text="Add" CommandName="Add" CommandArgument='<%# Eval("EmpID"))%>' /> </ItemTemplate> </asp:TemplateField> 

这是具有强types数据的传统方式和最新版本的asp.net框架,您不需要像“EMPID”

 <asp:LinkButton ID="LnkBtn" runat="server" Text="Text" RowIndex='<%# Container.DisplayIndex %>' CommandArgument='<%# Eval("??") %>' OnClick="LnkBtn_Click" /> 

在你的事件处理程序中

 Protected Sub LnkBtn_Click(ByVal sender As Object, ByVal e As EventArgs) dim rowIndex as integer = sender.Attributes("RowIndex") 'Here you can use also the command argument for any other value. End Sub