private void btnSearch_Click(object sender, EventArgs e)
        {
            
            
            if (validateInput())
            {
                
                string sql=string.Format("select c.invCode,i.cInvName,i.cInvStd,i.cComUnitName,c.BaseQtyN,c.BaseQtyD,i.cDefWareHouse,i.cWhName,i.cInvCname,c.loc,i.iInvNcost from bom_child as c inner join Inventorys as i on c.invCode=i.cInvCode where bomid=(select bomid from bom_parents where invCode='{0}' and version='{1}')",txtParentCode.Text,cboBomVersion.Text);
                try
                {
                    
                    dataAdapter = new SqlDataAdapter(sql, DBHelp.connection);                    dataAdapter.Fill(dataSet, "child");                    dgvChild.DataSource = dataSet.Tables["child"];
                   
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    DBHelp.connection.Close();
                }
                
            }
           
        }代码如上图所示第一次点击按钮是正确的,但是第二次点击按钮,在dgvChild(datagridview)控件中,会把两次的结果都显示出来。我猜测是应该是 dataset.table 和 datagridview里的行没有清空吧,这个要怎么处理呢?
我在
dgvChild.DataSource = dataSet.Tables["child"];
后面加了一条
dataSet.Tables["child"].Clear();但是这样,数据根本就不显示了。

解决方案 »

  1.   


    思路对了,但是不应该清空DataSet,应该清空datagridview的数据源
    试试
    datagridview.DataSource=null;
    dgvChild.DataSource = dataSet.Tables["child"];如果不行就
    datagridview.Rows.Clear();
    dgvChild.DataSource = dataSet.Tables["child"];
      

  2.   

    数据绑定之前 增加 dgvChild.Rows.Clear();
    就好了!
      

  3.   

    数据绑定之前 增加 dgvChild.Rows.Clear();
      

  4.   

    绑定前先把grid的绑定清空,然后再绑定
      

  5.   


    datagridview.DataSource=null;
    dgvChild.DataSource = dataSet.Tables["child"];
    Or
    datagridview.Rows.Clear();
    dgvChild.DataSource = dataSet.Tables["child"];