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