为什么对GridView按条件查询后,点击对应行的“删除”,可删除的却是查询前的第一行数据呢?请大家帮忙看看代码,多谢

为什么对GridView按条件查询后,点击对应行的“删除”,可删除的却是查询前的第一行数据呢?请大家帮忙看看代码,谢谢!
public partial class BackDesk_DeleNews : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        SqlConnection con = DataBase.createDatabase();
        SqlCommand cmd = new SqlCommand();
        SqlCommand cmd1 = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter("select * from tb_news", con);
        DataSet ds = new DataSet();
        sda.Fill(ds, "tb_news");
        this.News.DataSource = ds;
        this.News.DataKeyNames = new string[] { "ID" };
        this.News.DataBind();
        con.Close();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = DataBase.createDatabase();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter();
        DataSet ds = new DataSet();
        string type = this.type.Text;
        switch (type)
        {
            case "编号": sda = new SqlDataAdapter("select * from tb_news where ID like'%" + this.keyword.Text + "%'", con); break;
            case "标题": sda = new SqlDataAdapter("select * from tb_news where title like'%" + this.keyword.Text + "%'", con); break;
            case "内容": sda = new SqlDataAdapter("select * from tb_news where content like'%" + this.keyword.Text + "%'", con); break;
        }
        sda.Fill(ds, "tb_news");
        this.News.DataSource = ds;
        this.News.DataKeyNames = new string[] { "ID" };
        this.News.DataBind();
        con.Close();
    }
    private void BindData()
    {
        SqlConnection con = DataBase.createDatabase();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        DataSet ds = new DataSet();
        SqlDataAdapter sda = new SqlDataAdapter("select * from tb_news", con);
        sda.Fill(ds, "tb_news");
        this.News.DataSource = ds;
        this.News.DataKeyNames = new string[] { "ID" };
        this.News.DataBind();
    }
    protected void News_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        SqlConnection con = DataBase.createDatabase();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        string ID = News.DataKeys[e.RowIndex].Values["ID"].ToString();
        cmd.CommandText = "delete from tb_news where ID='" + ID + "'";
        cmd.ExecuteNonQuery();
        Response.Write("<script type=text/javascript>alert('删除成功!')</script>");
        BindData();
    }
   
}

在查询前,点击哪行的”删除“就能删除该行的信息,可是实现查询后就不行了,会删掉查询之前的第一行数据。
------解决思路----------------------
为什么在Button1_Click里又执行查询?
你要执行查询,要重新加载删除按钮啊,否则数据刷新了,按钮没有刷新
------解决思路----------------------
加个断点 看看   string ID = News.DataKeys[e.RowIndex].Values["ID"].ToString(); 中的Id是不是对应行的。
------解决思路----------------------
你在页面上隐藏一个控件,在点击删除时记录下这行的ID,然后后台就找这个隐藏控件的值,删除对应的数据就是。
话说,现在还有用纯服务器控件开发的吗?
------解决思路----------------------
按条件查询、删除一行数据示例
//查询条件
 <asp:DropDownList ID="ddlSearch" runat="server" Width="114px" Font-Size="9pt">
                                                <asp:ListItem Selected="True">用户ID</asp:ListItem>
                                                <asp:ListItem>用户名</asp:ListItem>
                                                <asp:ListItem>QQ号</asp:ListItem>
                                            </asp:DropDownList>
 <asp:TextBox ID="txtKey" runat="server" Width="81px" Font-Size="9pt"></asp:TextBox>//关键字输入框
<asp:Button ID="btnSearch" runat="server" Text="查询" OnClick="btnSearch_Click" Font-Size="9pt" Height="18px" Width="48px" />
//GridView设置
<asp:GridView ID="gvAdmin" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False" Font-Size="9pt" Width="500px" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDeleting="GridView1_RowDeleting" Font-Bold="False" OnRowDataBound="gvAdmin_RowDataBound">
                                    <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                                    <Columns>
                                        <asp:BoundField HeaderText="管理员ID" DataField="ID" />
                                        <asp:BoundField HeaderText="用户名" DataField="UserName" />
                                        <asp:BoundField HeaderText="管理员性别" DataField="Sex" />
                                        <asp:BoundField HeaderText="QQ" DataField="QQ" />
                                        <asp:BoundField HeaderText="注册时间" DataField="RegTime" />
                                        <asp:HyperLinkField DataNavigateUrlFields="ID" DataNavigateUrlFormatString="AdminInfo.aspx?ID={0}"
                                            HeaderText="详细信息" Text="详细信息" />
                                        <asp:CommandField ShowDeleteButton="True" HeaderText="删除" />
                                    </Columns>
                                    <SelectedRowStyle BackColor="#C5BBAF" ForeColor="#333333" Font-Bold="True" />
                                    <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                                    <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                                    <AlternatingRowStyle BackColor="White" />
                                    <RowStyle BackColor="#E3EAEB" />
                                    <EditRowStyle BackColor="#7C6F57" />
                                </asp:GridView>
//aspx.js页面设置
protected void btnSearch_Click(object sender, EventArgs e)
{
SqlData da = new SqlData();
string search=this.ddlSearch.SelectedValue;
switch (search)
{
case "用户ID":
da.BindData(this.gvAdmin, "Select * From tb_Admin Where ID  Like  '%" + this.txtKey.Text + "%'");
break;
case "用户名":
da.BindData(this.gvAdmin, "Select * From tb_Admin Where UserName  Like  '%" + this.txtKey.Text + "%'");
break;
case "QQ号":
da.BindData(this.gvAdmin, "Select * From tb_Admin Where QQ  Like  '%" + this.txtKey.Text + "%'");
break;
default:
Response.Write("<script lanuage=javascript>alert('出错拉!');location='javascript:history.go(-1)'</script>");
break;
      }//codego.net/tags/11/1/
}
//加载数据
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
                 if (Session["UserName"] == null)
                  {
                       Response.Redirect("../../Index.aspx");
                  }
SqlData da = new SqlData();
this.gvAdmin.DataSource = da.ExceDS("select * from tb_Admin");
gvAdmin.DataKeyNames = new string[] { "id" };
gvAdmin.DataBind();//绑定数据显示
}
}
//删除数据事件
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
        SqlData da = new SqlData();
da.ExceSQL("delete from tb_Admin where ID='" + gvAdmin.DataKeys[e.RowIndex].Value + "'");
Page.Response.Redirect("AdminManage.aspx");
      }
//是否确定删除对话框
protected void gvAdmin_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
((LinkButton)(e.Row.Cells[6].Controls[0])).Attributes.Add("onclick", "return confirm('确定删除吗?')");
}
}