获取GridView的列值

时间:2013-07-24 18:16:36

标签: c# asp.net .net

我有一个带有“删除”按钮的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();
    }
}

2 个答案:

答案 0 :(得分:2)

试试这个:

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"AutoGenerateSelectButton="true"上的GridView完成。 This question提供了解释。

答案 1 :(得分:0)

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

在标记中添加一个键,用于您想要访问的任何值

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

然后你应该能够获得行索引的值。

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

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

Here's an article with more information, and how to have more than one datakey