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