【发布时间】:2014-01-22 13:41:44
【问题描述】:
我一直在尝试通过DataGridView 同步数据库。到目前为止,我已经创建了一个数据模型类。此类包含与数据库匹配的多个属性。它们使用来自System.Data.Linq.Mapping 命名空间的[Table] 和[Column] 属性进行映射。
好的。所以我使用DataSource-Property 将DataGridView 绑定到连接到数据库(MSSQL)的DataContext。这个逻辑是在 singleton 类中实现的,所以我可以保证这个 DataContext 有一个实例。
this.m_context = new DataContext(conn);
this.m_VisitorTable = m_context.GetTable<Visitor>();
好吧,如果我将表绑定到我的DataGridView.DataSource,我可以看到数据库中的所有条目都已加载并正确显示。然后,如果我更改某些内容,我会发现自己面临同步问题。更改的单元格在数据库端没有更改。
为了保存我实现此方法的更改:
public void SaveChanges()
{
try
{
// I have no idea what I'm doing here.
VisitorLogic.Instance.m_VisitorTable.Context.SubmitChanges(System.Data.Linq.ConflictMode.Con
// I'm also trying to see if changes were made so I can save them before closing.
this.m_bChangesMade = false;
}
catch (Exception ex)
{
MessageBox.Show("Failed to save.", "Error");
}
}
有没有办法让整个数据库同步自动发生?就像自动提交更改一样。我想我将不得不在模型类上进行一些更改。目前,它没有实现任何接口,也没有继承任何东西。
这是类声明:
[Table(Name = "tblVisitor")]
public class Visitor
此外,我还没有找到“正确”更新我的DataGridView 的方法。我现在就是这样做的,但似乎并不总是有效。有没有更好的方法来做到这一点?
// Retrieve the new data from the database
VisitorLogic.Instance.m_VisitorTable.Context.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, VisitorLogic.Instance.m_VisitorTable);
// Set the DataSource to 'null'
this.dataGridView.DataSource = null;
// Refresh (?!)
this.dataGridView.Refresh();
// Bind the new DataSource, hoping it will show the new data.
this.dataGridView.DataSource = VisitorLogic.Instance.m_VisitorTable;
this.m_bChangesMade = false;
感谢您的帮助!
【问题讨论】:
标签: c# sql-server winforms visual-studio-2010 datagridview