2009-07-28 13 views
0

J'ai un DataGridView en C# qui se remplit avec les clients en fonction des critères de recherche lorsqu'une personne clique sur "rechercher". Le problème que j'ai est que lorsque la personne clique sur le bouton de recherche plus d'une fois pour rechercher des clients, ou si l'utilisateur veut faire une recherche différente, tous les détails de la dernière recherche sont toujours dans la vue de données. Le problème majeur en ce moment n'est pas que les colonnes ne sont pas supprimées ou que des extras sont ajoutés, mais que l'index de la colonne du bouton dans le datagridview devient "0" après avoir cherché plus d'une fois.Vider un DataGridView

Maintenant que j'ai compris le problème, je pense que je vais garder tous les détails ici au cas où quelqu'un voudrait regarder les détails à l'avenir. Le problème était, semble-t-il, que lorsque je supprime le custDataGridView.DataSource = null; partie, tout semblait fonctionner

Comme il semble y avoir une certaine ambiguïté, voici le code complet:

 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; 
     } 
    } 

Merci pour votre patience, espérons que cela aide quelqu'un d'autre!

Répondre

0

Question répondue maintenant, semblait être un problème avec:

custDataGridView.DataSource = null; 

Jetez un oeil pour le code complet, si vous pouvez faire d'autres suggestions s'il vous plaît faire :)

1

Définir la source de données à null devrait faire l'affaire, assurez-vous que votre ensemble particulier de code est frappé lorsque vous essayez une nouvelle recherche. Par exemple, branchez-le dans sa propre procédure et appelez la procédure au début de la recherche pour vous assurer que l'objet est effacé. Honnêtement, à moins que vous n'ayez une raison de ne pas effacer le DataSource chaque fois que vous appuyez sur le bouton de recherche, il n'y a probablement aucun intérêt à avoir une logique conditionnelle autour de cette section du code.

0

Quelle est exactement votre source de données? Est-ce un DataTable, une liste d'objets/entités, ou ajoutez-vous manuellement les lignes à DataGridView? Cela peut être l'évidence, mais si votre source de données est un DataTable ou une liste, vous devez vous assurer que vous supprimez tous les éléments de la liste avant de lui ajouter les nouveaux résultats de recherche, au lieu de vous concentrer sur DataGridView. lui-même.

Je suppose que votre solution DataSource = null actuelle ne fonctionne pas, et ce serait une explication évidente :)

0

Je suppose que vous ajoutez les lignes manuellement (dataGridView1.Rows.Add), dans lequel cas de définition de la source de données à null ne fera rien.