sqlite DataGridView不显示DataTable

bvuwiixz  于 2023-10-23  发布在  SQLite
关注(0)|答案(6)|浏览(220)

我得到了下面的代码,我认为应该将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。
  • 下一行是a,它提供了一个从同一个数据库中阅读的类--特别是它公开了GetDataTable方法,并返回我打算放入DataGridView的数据表。
  • 下一行没什么意思...
  • 第4行尝试抓取DataTable - QuickWatch表明这是工作.
  • 最后一行是我假设我搞砸了的地方...我的理解是,这将DataTable绑定到DataGridView GUI,但什么也没有显示。

有什么想法吗?

7uhlpewt

7uhlpewt1#

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

this.dataGridView1.DataSource = bindingSource;
laawzig2

laawzig22#

在获取数据表之前,您需要将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();
nxowjjhe

nxowjjhe3#

沿着上述解决方案还修复了“bindingSource”数据库属性。例如:

bindingSource.DataMember = yourDataSet.DataTable;

我在使用sql数据库和datagrid视图时也遇到了同样的问题。在经历了大量的麻烦之后,我发现我忘记设置绑定源的dataMember属性。
祝你好运。

kx5bkwkv

kx5bkwkv4#

所有这些对我都不起作用,尽管看起来都是好建议。我最后做的是世界上最大,最糟糕的黑客。我希望完成的只是从SQLite数据库加载一个DB表,并在DataGridView中显示它(只读,具有可排序的列)。实际的DB将在运行时以编程方式指定。我通过向表单添加DataGridView来定义数据集,并使用向导静态定义数据库连接字符串。然后我进入Settings.Designer.cs文件,并将set访问器添加到DB Connection字符串属性:

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黑客,但它的工作。关于如何清理这个烂摊子的建议非常受欢迎。
布莱恩

hof1towb

hof1towb5#

DataGridViewDataTable为基础。DataTable列保存其Type作为属性。
如果这个类型是一个接口,你会看到所有的空单元格。

ctehm74n

ctehm74n6#

这对我很有效(放在Form_Load中):

this.dataGridView1.AutoGenerateColumns = true;

显然,这是唯一的方法,因为AutoGenerateColumns没有在网格的属性表中列出。

相关问题