2009-11-03 8 views
4

J'ajoute une nouvelle ligne à un BindingSource qui est lié à un DataGridViewnouvellement ajouté Row - DataGridView et BindingSource

source.AddNew(); 

Après cela, utilisez BindingSource pour obtenir la ligne est de retour récemment ajouté la ligne suivante dans le DataGridView quand il est trié.

ROW "A" 
ROW "B" <- myBindingSource.AddNew(); 
ROW "C" 

myBindingSource.Current donne ROW "C". (Il est devenu la ligne sélectionnée dans le DataGridView)

J'ai besoin parce que je veux mettre à jour seulement les nouveaux ajoutés ligne

  DataRowView drv = (DataRowView)myBindingSource.Current; 
      myTableAdapter.Update(drv.Row); 

et non l'ensemble du tableau.

  myTableAdapter.Update(myDataSet.myTable); 

et aussi, je voudrais avoir cette nouvelle ligne ajoutée dans le DataGridView après l'insertion.

est-ce possible d'une certaine façon?

+0

même genre de question http://stackoverflow.com/questions/191339/ –

Répondre

1

Ne pas savoir id son la meilleure solution, mais, par exemple, semble mieux que itérer.

 DataRowView drv = (DataRowView)source.AddNew(); 
     grupoTableAdapter.Update(drv.Row); 
     grupoBindingSource.Position = grupoBindingSource.Find("ID", drv.Row.ItemArray[0]); 
+0

comment faire pour définir-row-of-datagridview-to-nouvellement-added-row-when-the-grid-bound-bound fait que DataGridView est lié pour sélectionner la nouvelle ligne ajoutée en conséquence même si une colonne est trié. –

0

Vous avez déjà identifié un moyen d'y parvenir. Une autre façon d'y parvenir est d'ignorer l'interface utilisateur complètement:

foreach (DataRow r in myTable.AsEnumerable().Where(x => x.RowState == DataRowState.Added)) 
{ 
    myTableAdapter.Update(r); 
} 

Bien sûr, cela appelle Update sur tous ajouté des lignes dans la table, pas celui qui vient d'être ajoutée, donc si vous avez un scénario fou où vous avez deux façons différentes d'ajouter de nouvelles lignes à la table, cela ne fonctionnera pas.

+0

Oui, mais il itère et ne fait pas la nouvelle ligne ajoutée sélectionnée dans la vue. Pourrait être utile dans certaines situations de toute façon. Merci à l'aide. –

7

Utilisez les événements du DataGridView comme celui-ci pour cette tâche:

private void RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    this.Rows[e.RowIndex].Selected = true; 
} 

qui marque la ligne nouvellement ajoutée comme sélectionnée.

0

L'extension de la réponse d'Oliver Friedrich, la fonction lors de sa création en utilisant la propriété des contrôles comme indiqué dans le concepteur ressemblera:

private void drv_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    drv.Rows[e.RowIndex].Selected = true; 
}