我有一个 GridView,其中包含我数据库中的一些数据。
但是,将鼠标悬停在删除链接上时,它会链接到不正确的 ID。
我希望它使用数据库中的 ID。
这个问题与this one密切相关- 但它从未收到答复。
我的 GridView
代码如下所示:
<asp:GridView ID="GridView1" runat="server" OnRowDeleting="GridView1_RowDeleting1" AutoGenerateColumns="false" DataKeyNames="id">
<Columns>
<asp:BoundField HeaderText="Name" DataField="name" />
<asp:BoundField HeaderText="Email" DataField="email" />
<asp:BoundField HeaderText="Comment" DataField="comment" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
</asp:GridView>
如何使 DeleteButton 链接到正确的 ID?
更新
将数据放入数据表的页面加载代码:
protected void Page_Load(object sender, EventArgs e)
{
DataTable commentsTable = null;
commentsTable = new DataTable("Comments");
using (SqlDataReader reader = studentManager.getCommentsFromDB())
{
commentsTable.Load(reader);
GridView1.DataSource = commentsTable;
GridView1.DataBind();
}
}
getCommentsFromDB:
public SqlDataReader getCommentsFromDB()
{
SqlConnection conn = dal.connectDatabase();
conn.Open();
cmd = new SqlCommand(@"SELECT id, name, email, comment FROM GuestBook", conn);
rdr = cmd.ExecuteReader();
return rdr;
}
最佳答案
您可以通过多种方式来完成此操作。我倾向于使用 ASP.NET 按钮并将 CommandName
属性设置为 "Delete"
。
<asp:Button ID="btnDelete" runat="server" CommandName="Delete" />
或
<asp:ImageButton ID="ibtnDelete" runat="server" ImageUrl="~/Images/Delete.gif" CommandName="Delete" />
或
<asp:CommandField ButtonType="Button" DeleteText="Delete" ShowDeleteButton="true" />
然后只需连接处理 OnRowDeleting
的事件即可。
protected void GridView1_RowDeleting1(object sender, GridViewDeleteEventArgs e) {
// Get the id
string id = GridView1.DataKeys[e.RowIndex].Value.ToString();
// Create the delete query
string sql = @"delete from GuestBook where id = @id";
using (SqlConnection conn = dal.connectDatabase()) {
cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@id", SqlDbType.Int);
cmd.Parameters["@id"].Value = id;
try {
conn.Open();
cmd.ExecuteScalar();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
// Refresh the GridView1
Bind_GridView1();
}
...以及每次要刷新 GridView
时调用的方法。在它自己的方法中调用 GridView
绑定(bind)调用会更清晰,您可以从页面中的任何位置调用该方法(这意味着您也可以从页面加载事件中调用它)。
public void Bind_GridView1() {
DataTable commentsTable = null;
commentsTable = new DataTable("Comments");
using (SqlDataReader reader = studentManager.getCommentsFromDB())
{
commentsTable.Load(reader);
GridView1.DataSource = commentsTable;
GridView1.DataBind();
}
}
关于c# - 使用按钮从 GridView 和数据库中删除记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13076166/