DataGridView不显示DataTable

时间:2009-05-22 21:41:45

标签: c# sqlite datagridview datatable system.data.sqlite

我有以下代码,我认为应该将DataTable绑定到DataGridView,但DataGridView显示为空。 DataTable肯定有行,所以我假设我正在如何错误地绑定DataSource。有谁看到这个有什么问题:

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;
  • 第一行只是获取我从中提取数据的数据库的句柄。
  • 下一行是一个提供从同一个db读取的类 - 特别是它暴露了GetDataTable方法,返回了我打算放入DataGridView的数据表。
  • 下一行是无趣的......
  • 第4行尝试抓取DataTable - QuickWatch表明这是有效的......
  • 最后一行是我假设搞砸了...我的理解是这将DataTable绑定到DataGridView GUI,但没有任何显示。

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

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

this.dataGridView1.DataSource = bindingSource;

答案 1 :(得分: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 :(得分:1)

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

bindingSource.DataMember = yourDataSet.DataTable;

我在sql数据库和datagrid视图中遇到了同样的问题。经过很多麻烦我发现我忘了设置绑定源的dataMember属性。

祝你好运。

答案 3 :(得分:0)

这对我来说都不起作用,尽管这看起来都是好建议。我最终做的是地球上最大,最糟糕的黑客攻击。我希望完成的只是从SQLite数据库加载数据库表并在DataGridView中呈现它(只读,带有可排序的列)。实际的DB将在运行时以编程方式指定。我通过向表单添加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 hack,但它确实有效。关于如何清理这些混乱的建议非常受欢迎。

布赖恩

答案 4 :(得分:0)

DataGridViewDataTable为基础。 DataTable列将其类型另存为属性。

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