我有以下代码,我认为应该将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;
有什么想法吗?
答案 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)
DataGridView
以DataTable
为基础。 DataTable
列将其类型另存为属性。
如果这个类型是一个接口,你会看到只有空单元格。