2017-09-16 1 views
1

Bonjour, j'ai un système de point de vente qui a deux datagridview, Quand je scanne un code-barres, le produit est automatiquement ajouté au chariot datagridview via l'événement textchanged.C Winforms C#. L'événement Textchanged cessera de fonctionner lorsque le bouton d'effacement est pressé

Cela fonctionne très bien mais quand je clique sur le "bouton d'effacement", L'événement textchanged cessera de fonctionner. Toute idée est appréciée merci.

Code bouton clair:

private void btnClearcart_Click(object sender, EventArgs e) 
    { 
     dgvPOScart.Rows.Clear(); 
     dgvPOScart.Refresh(); 

     if (dgvPOSproduct.Rows.Count > 0) 
     { 
      dgvPOSproduct.DataSource = null; 
     } 

      DataTable dt = new DataTable("Products"); 

      using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString)) 
      { 
       if (cnn.State == ConnectionState.Closed) 
        cnn.Open(); 
       using (SqlDataAdapter da = new SqlDataAdapter("Select ProductID, BrandName, GenericName, Quantity, SellingPrice, Dosage, Form, S,P, VE , Barcode , Category , Description from Products where Status = 'Active' and Quantity > 0", cnn)) 
       { 
        da.Fill(dt); 
        dgvPOSproduct.DataSource = dt; 
        productwidth(); 

       } 
      } 

    } 

du code pour datagridview produit sous forme de charge:

DataTable dt = new DataTable("Products"); 

    private void dgvProductNew() 
    { 
     try 
     { 
      using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString)) 
      { 
       if (cnn.State == ConnectionState.Closed) 
        cnn.Open(); 
       using (SqlDataAdapter da = new SqlDataAdapter("Select ProductID, BrandName, GenericName, Quantity, SellingPrice, Dosage, Form, S,P, VE , Barcode , Category , Description from Products where Status = 'Active' and Quantity > 0", cnn)) 
       { 
        da.Fill(dt); 
        dgvPOSproduct.DataSource = dt; 

        productwidth(); 

       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

Code événement TextChanged:

private void txtBarcodeSearch_TextChanged(object sender, EventArgs e) 
    { 
     DataView dv = dt.DefaultView; 
     selectedRow = null; 

     dv.RowFilter = string.Format("Barcode like '{0}%' ", txtBarcodeSearch.Text); 
     productwidth(); 

     if (txtBarcodeSearch.Text.Length == 13) 
     { 

      if (dgvPOSproduct.Rows.Count == 1) 
      { 
       selectedRow = 0; 
      } 

      if (selectedRow.HasValue) 
      { 
       addcartbarcode(); 
       txtBarcodeSearch.Clear(); 
      } 

     } 
    } 
+0

Quelle est la mise en œuvre de la méthode productwidth()? –

+0

Il est juste un paramètres pour la largeur des colonnes dans le produit datagridview monsieur. – StudentDev

+0

Êtes-vous sûr que l'événement textchanged est ce qui ne fonctionne pas ou l'analyse elle-même? –

Répondre

0

Avez-vous vérifié mettre un débogueur sur TextChanged Un événement? car il doit se déclencher en changeant le texte de la zone de texte. Donc, je pense que ce n'est pas votre problème.

mais ce qui suit peut être votre problème si je ne me trompe pas.

votre événement txtBarcodeSearch_TextChanged se déclenche toujours et le filtre de ligne filtre également les lignes selon les besoins, mais pas du même objet DataTable par exemple. cela signifie que vous ne filtrez pas le même objet datatable. à cause de vous avez déclaré l'objet dt deux fois, l'un public et l'autre privé en cas btnClearcart_Click lorsque vous cliquez sur le bouton clair que

private void btnClearcart_Click(object sender, EventArgs e) 
{ 
    dgvPOScart.Rows.Clear(); 
    dgvPOScart.Refresh(); 

    if (dgvPOSproduct.Rows.Count > 0) 
    { 
     dgvPOSproduct.DataSource = null; 
    } 

     //DataTable dt = new DataTable("Products"); //this was your issue 
     dt = new DataTable("Products");   //this will work 

     using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString)) 
     { 
      if (cnn.State == ConnectionState.Closed) 
       cnn.Open(); 
      using (SqlDataAdapter da = new SqlDataAdapter("Select ProductID, BrandName, GenericName, Quantity, SellingPrice, Dosage, Form, S,P, VE , Barcode , Category , Description from Products where Status = 'Active' and Quantity > 0", cnn)) 
      { 
       da.Fill(dt); 
       dgvPOSproduct.DataSource = dt; 
       productwidth(); 

      } 
     } 

} 

Ainsi, après bouton d'effacement cliquez sur votre datagridview se lie à une nouvelle instance datatable chaque fois que vous cliquez sur sur le bouton d'effacement. mais votre événement textchage filtrait le premier objet dt (datatable) uniquement qui n'est plus lié à la vue de données.

+0

Oui monsieur je pense vraiment datatable est le problème aussi et vous avez raison. C'est réparé maintenant merci beaucoup! – StudentDev

+0

Et désolé pour l'acceptation tardive de la réponse. j'ai été très occupé. – StudentDev

+0

Vous êtes les bienvenus, c'est ok. –