你的代码太乱,你的程序流程我也没看懂提示:
每一次对datagrid操作完毕(包括,翻页,修改,删除)都要重新连数据库,重新邦定.其次你好像没有取到treeview的值吧,如果不是postback的话我估计你取不到
而如果把treeview的autopostback属性设为true,又是很烦.你先说你程序的功能,执行流程,需要取得那些数据等
这样别人才能给你看看

解决方案 »

  1.   

    谢谢你对我的帮助,我详细的说一下我程序的思路:
    整个页面的结构是这样的:
    在其左侧为一个treeview控件,页面的主体为以datagrid控件,页面的下面是一个button。treeview1节点的text对应数据库的"工程编号"这个字段。按纽  delbtn  的  
     事件负责删除所选择的一条或多条记录,他是datagrid1之外的一个控件。  
     datagrid1里绑定了一个CheckBox的模板列,通过他选择一条或多条记录。程序运行并进入页面后,则程序就会首选调用函数BindGrid(),执行数据库连接,并读取
    treeview的默认的已选的节点的text,并把他传递给参数@gcbh,如果有满足“工程编号“
    =@gcbh的记录,则会执行数据绑定,在datagrid里显示出来。点击treeview的一个节点后,则激发 TreeView1_SelectedIndexChange()函数,读取节点的text,并把他传递给参数@gcbh,如果有满足“工程编号“
    =@gcbh的记录,则会执行数据绑定,在datagrid里显示出来。通过checkbox选择一条或多条datagrid里的记录,然后点击删除按钮delbtn,则激发函数
    delbtn_Click(),执行删除操作。
    具体思路就是这样的,麻烦你了!!
      

  2.   

    明白了,有几件事情是要搞清楚1.TreeView1_SelectedIndexChange()是否能取道treeview的节点
      如果取道了,那么对datagird重新进行数据bind,调用BindGrid
    2.delbtn是否工作正常,你可以先测试一下,如果他不能按你的要求工作,
      那调试就没什么意义了,先不要关treeview,你就先测试一下这个按钮大体上也就这两个问题,我觉得第二个要出问题,
    其次每次对datagrid操作完毕都要调用bindgrid()
      

  3.   

    这个问题我已经搞定了,让我苦笑不得的是:完全是我的疏忽,不好意思。
    但还有一点东西需要你帮忙:
    为什么不能删除多条记录,而只能删除一条,不论你选的是一条还是多条?
    这是负责删除的函数:
    private void delbtn_Click(object sender, System.EventArgs e)
    {
    CheckBox SelectItem;
    nextda = new System.Data.SqlClient.SqlDataAdapter();
    nextda.DeleteCommand = new System.Data.SqlClient.SqlCommand("DELETE FROM dengji WHERE 工程编号 = @gcbh1",sqlconn);
    nextda.DeleteCommand.Parameters.Add("@gcbh1",SqlDbType.VarChar,80,"工程编号");
    DataGrid1.DataKeyField="工程编号";
    for(int i=0;i<DataGrid1.Items.Count;i++)
    {
    SelectItem = (CheckBox)DataGrid1.Items[i].FindControl("SelectBox");
    if(SelectItem.Checked)
    {
    nextda.DeleteCommand.Parameters["@gcbh1"].Value = DataGrid1.DataKeys[(int)DataGrid1.Items[i].ItemIndex];
    sqlconn.Open();
    nextda.DeleteCommand.ExecuteNonQuery(); 
    sqlconn.Close();
    BindGrid();
    }
    }
    }对不起,我还有一个问题,我可真是个问题少年,不好意思:
    这是我的一个查询语句
    sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji WHERE _____ = @gcbh  ",sqlconn);
    其中的"_____"是我从一个dropdownlist里读出的字段名称,请问这该怎样实现???
    如果我想在加个条件,用于连接的and 或 or需要从 dropdownlist里读出,又该怎样实现?
      

  4.   

    nextda.DeleteCommand.Parameters["@gcbh1"].Value = DataGrid1.DataKeys[(int)DataGrid1.Items[i].ItemIndex];
    sqlconn.Open();
    nextda.DeleteCommand.ExecuteNonQuery(); 
    sqlconn.Close();
    BindGrid();
    你删除后马上BindGrid(),你选择的记录已经消失了吧所以把BindGrid()移到for外面
      

  5.   

    把BindGrid()移到for外面这样还不对么?
      

  6.   

    当然对了,我的第二个问题是:
    这是我的一个查询语句
    sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand("SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji WHERE _____ = @gcbh  ",sqlconn);
    其中的"_____"是我从一个dropdownlist里读出的字段名称,请问这该怎样实现???
    如果我想在加个条件,用于连接的and 或 or需要从 dropdownlist里读出,又该怎样实现?
    我已经说过了的,我知道这样有点得寸近尺,可我还是要拜托你,拜托了
      

  7.   

    比如:要查询工程编号=“001”并且工程负责人=“aa”的记录
    DropDownList1当前值为“工程编号”,DropDownList2当前值为“and”,语句可以这样写:string selectsql="SELECT 工程编号,登记日期,工程级别,建设单位,工程地点,联系人,工程负责人,任务去向 FROM dengji ";
    selectsql +=" where " +DropDownList1.SelectedItem.Text +"='001' " +DropDownList2.SelectedItem.Text +" 工程负责人='aa'";sqlda.SelectCommand = new System.Data.SqlClient.SqlCommand(selectsql,sqlconn);在测试的时候可以将selectsql语句输出来看看是否正确,只要注意一下字符串的操作就可以了。