2011-10-31 3 views
1

Bonjour Je suis en utilisant le code suivant pour mettre à jour la DGV lors de la validation:violations de concurrence DataGridView

 private void propertyInformationDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
    { 

     if (propertyInformationDataGridView.IsCurrentCellDirty && e.ColumnIndex.ToString() != "3") 
     { 
      propertyInformationTableAdapter.Update((newCityCollectionDataSet)propertyInformationBindingSource.DataSource); 
     } 
    } 

Et ce code pour mettre à jour le DGV et transmettre des valeurs à certaines tables:

private void propertyInformationDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
    if (e.ColumnIndex.ToString() == "3") 
     { 
      DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)propertyInformationDataGridView.Rows[e.RowIndex].Cells[3]; 


      DataGridViewRow row = propertyInformationDataGridView.Rows[e.RowIndex] as DataGridViewRow; 

      System.Data.DataRowView SelectedRowView; 
      newCityCollectionDataSet.PropertyInformationRow SelectedRow; 

      SelectedRowView = (System.Data.DataRowView)propertyInformationBindingSource.Current; 
      SelectedRow = (newCityCollectionDataSet.PropertyInformationRow)SelectedRowView.Row; 

      if (Convert.ToBoolean(checkCell.Value) == false && propertyInformationDataGridView.IsCurrentCellDirty) 
      { 
       DataClasses1DataContext dc = new DataClasses1DataContext(); 

       var matchedCaseNumber = (from c in dc.GetTable<PropertyInformation>() 
             where c.CaseNumberKey == SelectedRow.CaseNumberKey 
             select c).SingleOrDefault(); 
       DateTime saveNow = DateTime.Now; 

       reportsSent newReport = new reportsSent(); 
       newReport.CaseNumberKey = SelectedRow.CaseNumberKey; 
       dc.reportsSents.InsertOnSubmit(newReport); 
       matchedCaseNumber.DateFinished = saveNow; 
       dc.SubmitChanges(); 

      } 


     } 
    } 

Que se passe est quand je clique sur la valeur finie ou cellvalue 3 puis clique sur une cellule différente pour la valeur de la cellule par exemple 0 sur un enregistrement différent Je reçois une erreur. Je comprends pourquoi je reçois l'erreur, mais comment pourrais-je éviter cela? Devrais-je déplacer le code de la validation au clic afin que l'erreur ne se produise pas ou y a-t-il une autre façon de gérer cela? La raison pour laquelle l'erreur se produit est parce que je suis mise à jour avec ceci: dc.SubmitChanges(); puis il met à jour à nouveau ici:

if (propertyInformationDataGridView.IsCurrentCellDirty && e.ColumnIndex.ToString() != "3") 
     { 
      propertyInformationTableAdapter.Update((newCityCollectionDataSet)propertyInformationBindingSource.DataSource); 
     } 

Je ne sais pas comment forcer le jeu de données droit d'être mis à jour après une affaire est terminée.

erreur est:

violation Concurrency: UpdateCommand affecté 0 des attendus 1 enregistrements.

Dans le concepteur, il montre ici:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")] 
    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")] 
    public virtual int Update(newCityCollectionDataSet dataSet) { 
     return this.Adapter.Update(dataSet, "PropertyInformation"); 

Merci,

Kor

+3

Toujours inclure le libellé du message d'erreur dans votre question. –

Répondre

0

Pourquoi les jeux de données et LINQ exactement combinez-vous fortement typées à SQL? Comme vous l'avez peut-être deviné, ils essaient de mettre à jour les mêmes données, de sorte que le framework qui vient en second est frappé avec un ConcurrencyViolation.

+0

Je comprends ce qui se passe la question est comment puis-je le réparer? – korrowan

+0

Utilisez le même cadre pour tout ou rechargez chacun d'eux à partir de la base de données chaque fois que l'autre met à jour la base de données. – sq33G

+0

Eh bien, je ne sais comment mettre à jour une table avec Linq à SQL alors comment je le ferais? La seule valeur qui doit être mise à jour est DateFinished à DateTime.Now() qui se trouve dans la table propertyInformation. – korrowan