2009-05-22 130 views
0

我有下面的代码,我认为应该绑定DataTable到DataGridView,但DataGridView显示为空。 DataTable肯定有行,所以我假设我不正确地绑定DataSource的一些方法。有谁看到什么是错的:DataGridView不显示数据表

DataBase db = new DataBase(re.OutputDir+"\\Matches.db"); 
MatchDBReader reader = new MatchDBReader(db.NewConnection()); 

BindingSource bindingSource = new BindingSource(); 
bindingSource.DataSource = reader.GetDataTable(); 

this.dataGridView1.DataSource = bindingSource.DataSource; 
  • 第一行只是获取一个句柄,我是从提取数据的数据库。
  • 下一行是提供了一个从同一个数据库读取的类 - 特别是它暴露了GetDataTable方法,并返回了我打算放入DataGridView的数据表。
  • 下一行是无趣...
  • 第四行试图抢在数据表 - 快速监视表明,这是工作...
  • 的最后一行是我认为我已经搞砸了......我的理解是,它将DataTable绑定到DataGridView GUI,但没有任何显示。

有什么想法?

回答

0

这一切都没有为我工作,但它似乎都是很好的建议。我最终做的是世界上最大最糟糕的黑客攻击。我希望完成的工作就是简单地从SQLite数据库加载数据库表,并在DataGridView中显示它(只读,可排序的列)。实际的数据库将在运行时以编程方式指定。我通过向表单添加DataGridView并使用向导来静态定义数据库连接字符串来定义DataSet。然后,我走进了Settings.Designer.cs文件,并添加了set访问到数据库连接字符串属性:

namespace FormatDetector.Properties { 


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] 
    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 

     private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 

     public static Settings Default { 
      get { 
       return defaultInstance; 
      } 
     } 

     [global::System.Configuration.ApplicationScopedSettingAttribute()] 
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)] 
     [global::System.Configuration.DefaultSettingValueAttribute("data source=E:\\workspace\\Test\\Matches.db;useutf16encoding=True")] 
     public string MatchesConnectionString { 
      get { 
       return ((string)(this["MatchesConnectionString"])); 
      } 
      set 
      { 
       (this["MatchesConnectionString"]) = value; 
      } 
     } 
    } 
} 

这是一个klugey黑客,但它的作品。关于如何清理这个烂摊子的建议不仅值得欢迎。

布赖恩

1

在获取数据表之前,您需要将BindingSource附加到您的网格。

尝试切换代码的​​最后两行:

DataBase db = new DataBase(re.OutputDir+"\\Matches.db"); 
MatchDBReader reader = new MatchDBReader(db.NewConnection()); 
BindingSource bindingSource = new BindingSource(); 
this.dataGridView1.DataSource = bindingSource.DataSource; 
bindingSource.DataSource = reader.GetDataTable(); 
2

尝试直接绑定的DataGridView到BindingSource,而不是的BindingSource的DataSource:

this.dataGridView1.DataSource = bindingSource; 
1

除了上述解决方案还修复了“ bindingSource“datamember属性。像:

bindingSource.DataMember = yourDataSet.DataTable; 

我有同样的问题与sql数据库和datagrid视图。在经历了很多麻烦之后,我发现我忘了设置绑定源的dataMember属性。

祝你好运。

+0

这实际上是什么即时通讯在这里做这行: bindingSource.DataSource = reader.GetDataTable(); – 2009-05-25 16:36:55

0

DataGridView需要DataTable作为基础。 DataTable列将其类型保存为属性。

如果这种类型是一个接口,所有你会看到是空单元格。