>我有一个带有网格视图的网络表单。 第一列有一个按钮"更新"和"删除"。 我想要的是当我单击删除按钮代码时,获取我的第 3 列中的 id。
使用以下代码,我只得到"1"
if (e.CommandName == "Delete")
{
int id = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[id];
Add_update delete = new Add_update();
delete.deleteVehicle(Convert.ToInt32(id));
reload();
}
使用 CommandArgument 来定位 Row by 索引并不是好的做法,因为例如可以通过排序来更改行顺序。
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var dataObjects = new List<DataObject>();
for (int i = 0; i < 100; i++)
{
dataObjects.Add(new DataObject() { Index = i });
}
gridView1.DataSource = dataObjects;
gridView1.DataBind();
}
}
protected void gridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
var dataObjectIndex = int.Parse((string) e.CommandArgument);
e.Handled = true;
}
}
}
public class DataObject
{
public int Index { get; set; }
}
<asp:GridView ID="gridView1" runat="server" OnRowCommand="gridView1_RowCommand" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Index" HeaderText="Index" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" runat="server" CommandName="Delete" CommandArgument='<%# Bind("Index") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>