【问题标题】:How to get row index according to clicked button from asp.net GridView?如何根据来自asp.net GridView的单击按钮获取行索引?
【发布时间】:2013-01-11 23:12:45
【问题描述】:

我有一些记录(1 条记录=1 行)的 Gridview。

在每一行我都添加了一个按钮来从我的 mysql 数据库中删除这条记录。

每一行都有相同的按钮。

问题是我需要知道在哪一行点击了按钮?我需要这个来获取行索引以获取该行中我的记录的 id。

我怎样才能以最简单的方式做到这一点?

网格视图:

        <asp:GridView ID="GridView1" runat="server" 
        CellPadding="6" EnableModelValidation="True" ForeColor="#333333" 
        GridLines="None" Caption="TWOJE WIZYTY" Font-Bold="True" 
        onrowcreated="GridView1_RowCreated" style="text-align: left">
        <AlternatingRowStyle BackColor="#AEAEAE" />
        <EditRowStyle BackColor="Blue" />
        <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#868686" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="Blue" ForeColor="#333333" HorizontalAlign="Center" />
        <RowStyle BackColor="#C7C7C7" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
    </asp:GridView>

按钮是这样添加的:

        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        Button b1 = new Button();
        b1.Text = "usuń";
        b1.OnClientClick = "return potwierdzenie()";
        b1.Click+=new EventHandler(b1_Click);
        TableCell cel = new TableCell();
        cel.Width = Unit.Pixel(180);
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Visible = false;
            e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[2].Text = "";
            e.Row.Cells.Add(cel);
        }
        else
        {
            //HERE IS MY BUTTON ADDED! *********************
            cel.Controls.Add(b1);
            cel.HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[0].Visible = false;
            e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Left;
            e.Row.Cells.Add(cel);
        }
    }

【问题讨论】:

  • 你能用你用于 GridView 的标记更新问题吗?根据您声明按钮的方式,解决方案可能会有所不同。
  • 记录的id在哪里?您使用的是 C# 还是 VB.NET?
  • 看一下this question 的第一个答案,以获得一个想法——希望对您有所帮助。

标签: asp.net gridview


【解决方案1】:

您可以使用按钮的NamingContainer 属性来获取GridViewRow。然后您就拥有了查找其他控件所需的一切(例如,如果您使用 TemplateFields,则为带有 ID 的控件)。

protected void button_Delete_click(Object sender, EventArgs e)
{
    Button btn = (Button) sender;
    GridViewRow row = (GridViewRow) btn.NamingContainer;
    // assuming you store the ID in a Hiddenield:
    Hiddenield hiddenID = (HiddenField) row.FindControl("HiddenID");
    int ID = int.Parse(hiddenID.Value);
    // delete the record
}

您也可以通过row.RowIndex 获取row-index

【讨论】:

  • @PawełAdamczyk:由于您现在已经编辑了您的问题并表明您不使用模板字段,因此您不能使用 FindControl。但是,如果有帮助,您可以使用 row.RowIndex 获取索引。(编辑了我的答案。)
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2018-09-16
  • 2018-06-15
  • 1970-01-01
  • 2015-04-18
  • 2019-04-02
相关资源
最近更新 更多