2009-11-15 11 views
0

[Note: J'ai simplifié mon exemple pour plus de clarté]Mise à jour de mon datagridviewcomboboxcolumns de la table directement

Disons que j'ai une base de données SQLite avec deux tables: Articles et secteurs:

Articles:

id_items : INTEGER PRIMARY KEY 
name_item : VARCHAR(...) 
id_sector : INTEGER 

Secteurs:

id_sector : INTEGER PRIMARY KEY 
name_sector : VARCHAR(...) 

J'ai actuellement un datagridview lié au éléments table. Il se nourrit bien, et la table affiche le secteur en tant que datagridviewcomboboxcolumns.

Ainsi, dans mon Winforms CustomControl, j'ai tout le chargement de données et de liaison qui se produit dans le procédé de charge():

colSector.DataSource = m_dataContext.SectorTable; 
colSector.DisplayMember = "name_sector"; 
colSector.ValueMember = "id_sector"; 
ItemsGrid.DataSource = new DataView(m_dataContext.ItemsTable); 

Les comboboxes de ma dataview sont bien chargés avec les données provenant des Secteurs tableau.

Je voudrais maintenant un bouton sur mon formulaire qui permettrait la création d'un nouveau secteur:

J'ai créé un txtbox (txtNewSector) et un bouton qui déclenche la création:

private void btnAddNewSector_Click(object sender, EventArgs e) 
    { 
     // Add new sector to db 
     m_dataContext.AddNewSector(newSectorName); 

     // refresh dataview so that comboboxes are updated with the new entry 
     ??? 
    } 

Comment puis-je effectuer cette actualisation?

J'espère que le fait modifier la question plus claire, s'il vous plaît conseiller ....

meilleures salutations

+0

pourrait-il que AddNewSector écrit à la base de données sans mettre à jour le contexte de données?Normalement, en se liant à un DataView, si un nouvel enregistrement est ajouté à la table sous-jacente, la grille des éléments doit être automatiquement mise à jour. –

Répondre

1

Au lieu de

??? 

ajouter

ItemsGrid.DataSource = new DataView(m_dataContext.ItemsTable); 
0

Vous pouvez utiliser un timer pour cela. Il accomplira la tâche après un certain intervalle de temps.

Regardez l'exemple Timer in C#.

Vous trouverez l'idée de l'utiliser.

Je suis donner une esquisse

private DataTable LoadData() 
{ 
    DataTable dt = LoadDatabaseData(); 

    return dt; 
} 

private void timer1_Tick(object sender, System.EventArgs e) 
{ 

    myDataGrid.DataSource = LoadData(); 

    myDataGrid.Databind(); 

     or 

    your combo box's datasource what ever. 

} 

Remarque- vous utilisez SQLite au sujet de laquelle je n'ai aucune idée à part, il est une base de données. Je vous ai seulement montré comment appeler la fonction qui sera la source de données pour votre grille et toutes les 1 s (je veux dire quel que soit l'intervalle de temps que vous spécifiez) les données seront rafraîchies.

Espérons que cela aide.

+0

Désolé, j'ai été mal compris. Je suis à la recherche du ** code ** qui mettra à jour la vue actuelle afin que les listes déroulantes liées à une entrée de base de données qui a changé soient mises à jour. – karlipoppins

+0

Créez une fonction qui chargera les données de la base de données et sera liée à la grille. Appelez maintenant la fonction à partir de l'événement tick de la minuterie, dites toutes les 1 minute. –

Questions connexes