DataGridView не отображает DataTable - PullRequest
0 голосов
/ 23 мая 2009

У меня есть следующий код, который, по моему мнению, должен связывать 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;
  • Первая строка просто получает дескриптор БД, из которой я извлекаю данные.
  • Следующая строка представляет класс для чтения из того же самого БД - в частности, он предоставляет метод GetDataTable с возвращением таблицы данных, которую я намереваюсь поместить в DataGridView.
  • Следующая строка неинтересна ...
  • 4-я строка пытается получить DataTable - QuickWatch указывает, что это работает ...
  • В последней строке я предполагаю, что я облажался ... Насколько я понимаю, это связывает DataTable с графическим интерфейсом DataGridView, но ничего не отображается.

Есть мысли?

Ответы [ 5 ]

2 голосов
/ 23 мая 2009

Попробуйте связать DataGridView непосредственно с BindingSource, а не с источником данных BindingSource:

this.dataGridView1.DataSource = bindingSource;
1 голос
/ 23 мая 2009

Наряду с вышеприведенными решениями также исправьте свойство damamember для привязки как:

bindingSource.DataMember = yourDataSet.DataTable;

У меня была такая же проблема с базой данных sql и представлением таблицы данных. После многих неприятностей я обнаружил, что забыл установить свойство dataMember моего источника привязки.

удачи.

1 голос
/ 23 мая 2009

Вам нужно присоединить ваш 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();
0 голосов
/ 15 марта 2012

DataGridView принимает DataTable за основу. Столбцы DataTable сохраняют свой тип как свойство.

Если этот тип является интерфейсом, все, что вы увидите, это пустые ячейки.

0 голосов
/ 26 мая 2009

Ничего из этого не помогло мне, хотя все это казалось хорошим советом. То, что я закончил, было самым большим, худшим взломом на земле. То, что я надеялся сделать, это просто загрузить таблицу БД из базы данных SQLite и представить ее (только для чтения, с сортируемыми столбцами) в DataGridView. Фактическая БД будет указана программно во время выполнения. Я определил DataSet, добавив DataGridView в форму, и использовал мастера для статического определения строки подключения к БД. Затем я зашел в файл 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, но это работает. Предложения о том, как убрать этот беспорядок, более чем приветствуются.

1007 * Брайен *

...