2009-07-28 43 views
0

我有一个C#中的datagridview,当用户单击“搜索”时,它将根据搜索条件与客户进行填充。我遇到的问题是,当用户多次点击搜索按钮搜索客户时,或者用户想要执行其他搜索时,上次搜索中的所有详细信息仍然位于datagridview中。现在的主要问题不是列没有被删除或额外添加,但datagridview中的按钮的列索引在搜索多次后变为“0”。清空DataGridView

现在我已经知道了这个问题,我想我会在这里保留所有的细节,以防将来有人想查看细节。问题是,看来,当我删除custDataGridView.DataSource = null;部分,一切似乎都工作

至于似乎有一些不确定性,这里是代码全:

 DataGridViewButtonColumn custAddJobSelect = new DataGridViewButtonColumn(); 
     Datatable dt = new Datatable(); 
     // ---> This was the culprit ---> custDataGridView.DataSource = null; 
     dt.Rows.Clear(); 

     #region SQL connection String 
     ...//CustQuery is the SQL stuff, conn is connection to DB. 
     #endregion 

     da = new System.Data.SqlClient.SqlDataAdapter(CustQuery, conn); 
     da.Fill(dt); 

     conn.Close(); 

     custDataGridView.DataSource = dt; 


     if (AddJobGone == false) 
     { 

      AddJobGone = true; 
      custAddJobSelect.DisplayIndex = 0; 
      custDataGridView.Columns.Add(custAddJobSelect); 
     } 

     private void custDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == this.custDataGridView.Columns.Count - 1) 
     { 
      string addJobsCustNo = custDataGridView.Rows[e.RowIndex].Cells[0].FormattedValue.ToString(); 
      txtAddJobsCustNo.Text = addJobsCustNo; 
      pnlAddJobSearchCustomer.Visible = false; 
     } 
    } 

感谢您的耐心,希望这可以帮助别人!

回答

0

现在的问题回答,似乎是一个问题:

custDataGridView.DataSource = null; 

看看全码,如果你可以让任何其他建议,请做:)

1

将数据源设置为空应该做的窍门,确保您尝试新的搜索时,您的特定代码集正在被击中。例如,将其插入到自己的过程中,并在搜索开始时调用该过程以确保该对象被清除。实际上,除非每次按下搜索按钮时都没有清除DataSource的原因,否则围绕该代码段的条件逻辑可能没有意义。

0

什么是您的数据源?它是DataTable,对象/实体列表,还是您手动将这些行添加到DataGridView?

这可能是显而易见的,但如果您的数据源是DataTable或列表,则应确保在将新搜索结果添加到列表中之前将所有项从列表中删除,而不是将注意力集中在DataGridView上本身。

我假设你目前DataSource = null解决方案不起作用,这将是一个显而易见的解释:)

0

我猜您要添加的行手动(dataGridView1.Rows.Add),其中如果将DataSource设置为null,则不会执行任何操作。