2012-06-13 48 views
1

我是C#,Windows Forms和datagridviews的新手。我有一個選項卡式窗體:選項卡1顯示練習表的datagridview;選項卡2用於向表中添加新練習。練習表通過test_ExercisesDataSet,vwexercisesBindingSource,vw_ExercisesTableAdapter綁定到datagrid視圖。如何更新/重新加載DataGridView BindingSource?

我不知道我需要做什麼來重新綁定/刷新綁定源,以便在切換回選項卡1時使datagridview刷新。如果我完全關閉表單並重新啓動它,我可以看到表中的新行。

我見過很多Web上和StackOverflow的例子,但我仍然不明白我做錯了什麼。

順便說一下,我正在使用Visual Studio 2010.

任何幫助表示讚賞!

謝謝!

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(); 
     } 
    } 
} 

回答

1

創建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; 

} 

現在,所有你需要做的就是調用該方法在兩個你Form1_Load的(),並在您的InsertExcercise()結束。如果您必須使用DataSet,請不要忘記在末尾處理DataAdapter對象以節省資源。

0

在完成插入之後,您必須使用數據庫中的信息重新載入數據集。這不是自動的!