获取GridView的列值

本文关键字:GridView 获取 | 更新日期: 2023-09-27 18:24:41

我有一个带有"删除"按钮的GridView。我需要获取索引[3]的列或单元格的值。但对于GridView1.SelectedRow.Cells[3].Text;,它返回null。有人帮我吗?我不想使用javascript。

我的aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" GridLines="None"
        CssClass="table table-bordered table-striped">
        <Columns>
            <asp:BoundField DataField="DisplayName" HeaderText="Display Name" />
            <asp:BoundField DataField="UserName" HeaderText="User Name" />
            <asp:BoundField DataField="Email" HeaderText="Email" />
            <asp:BoundField DataField="Name" HeaderText="Name" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Button ID="btnDelete" runat="server" Text="Delete" OnClick="btnDelete_OnClick" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

我的.cs:

protected void btnDelete_OnClick(object sender, EventArgs e)
{
    using (objConexao = new SqlConnection(strStringConexao))
    {
        SqlConnection oConn = new SqlConnection();
        SqlCommand oCommand = new SqlCommand();
        string strConn = ConfigurationManager.ConnectionStrings["XXX"].ConnectionString;
        oConn.ConnectionString = strConn;
        oCommand.Connection = oConn;
        oCommand.CommandText = "proc_Delete";
        oCommand.CommandType = CommandType.StoredProcedure;
        SqlParameter myParam = oCommand.Parameters.Add("@UserRequestor", SqlDbType.NVarChar);
        myParam.Value = User;
        SqlParameter myParam2 = oCommand.Parameters.Add("@UserName", SqlDbType.NVarChar);
        myParam2.Value = GridView1.Columns[3].ToString();
        oConn.Open();
        oCommand.ExecuteNonQuery();
        oConn.Close();
    }
}

获取GridView的列值

试试这个:

protected void btnDelete_OnClick(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer
    string desiredText = row.Cells[3].Text;
    using (objConexao = new SqlConnection(strStringConexao))
    {
        // ...
        myParam2.Value = desiredText;
        // ...
    }        
}

NamingContainer将为您获取点击的Button的行

我认为SelectedRow属性不起作用,因为单击按钮并不构成选择行。这是通过按钮上的CommandName="Select"GridView上的AutoGenerateSelectButton="true"来完成的。这个问题提供了一个解释。

这已经有一段时间了,但我知道你可以使用datakeynames。

在标记中,为要访问的任何值添加一个密钥

<asp:GridView ID="GridView1" DataKeyNames="Email" runat="server" AutoGenerateColumns="false" GridLines="None"
    CssClass="table table-bordered table-striped">

然后,您应该能够获得具有行索引的值。

GridView1.DataKeys[3].Value.ToString()

已经有一段时间了,所以你可能不得不玩这个。

这是一篇文章,提供了更多信息,以及如何拥有多个数据密钥