2012-06-13 3 views
1

Je suis nouveau sur C#, Windows Forms et datagridviews. J'ai un formulaire à onglets: l'onglet 1 affiche une vue datagrid du tableau des exercices; L'onglet 2 sert à ajouter un nouvel exercice à la table. La table des exercices est liée à la vue DataGrid via test_ExercisesDataSet, vwexercisesBindingSource, vw_ExercisesTableAdapter. Je ne suis pas sûr de ce que je dois faire pour redéfinir/rafraîchir la source de liaison afin d'actualiser le datagridview lorsque je repasse à l'onglet 1. Si je ferme complètement le formulaire et le redémarre, je vois la nouvelle rangée dans la table.Comment mettre à jour/recharger DataGridView BindingSource?

J'ai vu de nombreux exemples à la fois sur le Web et sur StackOverflow mais je ne comprends toujours pas ce que je fais de mal.

BTW, j'utilise Visual Studio 2010.

Toute aide est appréciée !!

Merci!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace testTabbedInterface 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public string GetConnectionString() 
     { 
      return connString; 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'test_ExercisesDataSet.vw_exercises' table. You can move, or remove it, as needed. 
      this.vw_exercisesTableAdapter.Fill(this.test_ExercisesDataSet.vw_exercises); 
      exerciseListDataGridView.DataSource = this.test_ExercisesDataSet.vw_exercises; 
     } 

     private void InsertExercise(string exerciseName, string exerciseDescription, string exerciseBegin) 
     { 
      var conn = new SqlConnection(GetConnectionString()); 
      const string InsertExerciseSql = @"INSERT INTO database.dbo.exercises 
       (PK_exerciseUID, 
       exerciseName, 
       exerciseDescription, 
       exerciseBegin, 
       exerciseEnd) 
       VALUES 
       (@PK_exerciseUID, 
       @exerciseName, 
       @exerciseDescription, 
       @exerciseBegin, 
       NULL)"; 

      try 
      { 
       SqlCommand cmd = new SqlCommand(InsertExerciseSql, conn); 
       var param = new SqlParameter[4]; 

       Guid exerciseGUID = Guid.NewGuid(); 
       param[0] = new SqlParameter("@PK_exerciseUID", exerciseGUID); 
       param[1] = new SqlParameter("@exerciseName", exerciseName); 
       param[2] = new SqlParameter("@exerciseDescription", exerciseDescription); 

       //Convert date(s) to correct format 
       DateTime exerciseBeginConverted = Convert.ToDateTime(exerciseBegin); 
       param[3] = new SqlParameter("@exerciseBegin", exerciseBeginConverted); 

       foreach (SqlParameter t in param) 
       { 
        cmd.Parameters.Add(t); 
       } 

       conn.Open(); 
       cmd.CommandType = CommandType.Text; 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Test/Exercise, " + exerciseName + ", successfully added!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
      catch (SqlException ex) 
      { 
       string msg = "Error inserting into 'exercises': "; 
       msg += ex.Message; 
       throw new Exception(msg); 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 

     private void saveExerciseButton_Click(object sender, EventArgs e) 
     { 
      InsertExercise(exerciseName.Text, exerciseDescription.Text, exerciseBegin.Text); 

      this.exerciseListDataGridView.EndEdit(); 

      tabControl1.SelectTab("testExerciseTab"); 
     } 

     private void addExButton_Click(object sender, EventArgs e) 
     { 
      tabControl1.SelectTab("exerciseTab"); 
     } 

     private void reloadExListButton_Click(object sender, EventArgs e) 
     { 
      this.exerciseListDataGridView.Refresh(); 
     } 
    } 
} 

Répondre

1

Créer une méthode LoadDataGridView:

private void LoadDataGridView() { 
    // Fill a DataAdapter using the SelectCommand. 
    DataAdapter da = null; 

    // The Sql code here 

    // In case something fails, bail out of the method. 
    if (da == null) return; 

    // Clear the DataSource or else you'll get double of everything. 
    if (exerciseListDataGridView.DataSource != null) { 
     exerciseListDataGridView.DataSource.Clear(); 
     exerciseListDataGridView.DataSource = null; 
    } 

    // I'm doing this off the top of my head, you may need to fill a DataSet here. 
    exerciseListDataGridView.DataSource = da.DefaultView; 

} 

Maintenant, tout ce que vous avez à faire est d'appeler cette méthode à la fois votre Form1_Load() et à la fin de votre InsertExcercise(). Si vous devez utiliser un DataSet, n'oubliez pas de disposer de l'objet DataAdapter à la fin pour conserver les ressources.

0

Vous devez recharger votre Dataset avec les informations de la base de données après avoir effectué l'insertion. Ce n'est pas automatique!

Questions connexes