c# - 使用按钮从 GridView 和数据库中删除记录

标签 c# c#-4.0 gridview

我有一个 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/

相关文章:

c# - 在不拦截子控件输入的情况下实现表单级快捷方式

c# - 如何减少C#程序中Sql连接池占用的内存量

ios - 如何在 Xamarin 中以编程方式创建不规则按钮?

c# - 单击 gridview 列标题整个 gridview 试图覆盖窗口

c# - PostMessage 参数从 32 位 C# 到 64 位 C++

c# - 使用 C# 指针

c# - 使用图表控件在两点之间画一条线

c# - ExpandoObject 的真正优势是什么?

c# - 如何检查 Gridview 中的 CheckBoxField 是否被选中?

wpf - ListView.GridViewColumn (*) 宽度