J'essaie de lier une table de structures à un DataGridView. Le chargement et l'affichage de la table fonctionnent correctement, mais je ne peux pas modifier une valeur et la récupérer dans la table. Voici ce que je fais.Bound DataGridView ne pas mettre à jour la source de données
J'ai un type de données "primitive", réel défini par
public struct MyReal:IMyPrimative
{
public Double m_Real;
//...
public MyReal(String val)
{
m_Real = default(Double);
Init(val);
}
//...
}
Il se sert dans une structure:
public struct MyReal_Record : IMyRecord
{
public MyReal Freq { get; set;}
MyReal_Record(String[] vals)
{
Init(vals);
}
}
Et la structure est utilisée pour définir une table à l'aide d'une liaison générique Liste
public class MyTable<S> : BindingList<S> where S: struct, IMyRecord
{
public Type typeofS;
public MyTable()
{
typeofS = typeof(S);
// ...
}
Cette table est utilisée comme source de liaison pour une grille, dynamiquement. Tout cela fonctionne très bien et je peux créer RTable, l'initialiser et l'afficher dans une grille. La grille permet l'édition et a des événements définis pour CellParsing et CellFormatting qui ressemblent à:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.DesiredType != typeof(String))
return;
e.Value = e.Value.ToString();
}
private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
if (e.DesiredType != typeof(MyReal))
return;
e.Value = new MyReal(e.Value.ToString());
e.ParsingApplied = true;
this.dataGridView1.UpdateCellValue(e.ColumnIndex, e.RowIndex);
}
Lorsque je modifier une valeur dans une cellule, je peux changer le texte. En quittant la cellule, CellParsing se déclenche et le gestionnaire d'événements est appelé. Tout semble être correct dans le gestionnaire de CellParsing. e.DesiredType est MyReal. e.Value est une chaîne avec la nouvelle valeur. Une fois le nouveau MyReal créé à partir de la chaîne, e.Value est défini correctement. RowIndex et ColumnIndex sont corrects. ReadOnly est défini sur false. Cependant, lorsque je quitte la cellule, le système restaure la valeur d'origine dans la cellule. Je pensais que UpdateCellValue remplacerait la valeur dans le dataSource mais il me semble qu'il manque quelque chose.
Qu'est-ce que j'ai manqué?
Merci, Max