如何更新/重新加载DataGridView BindingSource?

我是C#,Windows Forms和datagridviews的新手。 我有一个标签forms:选项卡1显示练习表的数据网格视图; 选项卡2用于向表中添加新练习。 exercise表通过test_ExercisesDataSet,vwexercisesBindingSource,vw_ExercisesTableAdapter绑定到datagrid视图。

我不知道我需要做什么才能重新绑定/刷新绑定源,以便在切换回选项卡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(); } } } 

创建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对象以节省资源。

在插入后,您必须使用数据库中的信息重新加载数据集。 这不是自动的!