2009-05-22 8 views
0

У меня есть следующий код, который, я думаю, должен привязывать DataTable к DataGridView, но DataGridView отображается пустым. У DataTable определенно есть строки, поэтому я предполагаю, что я неправильно привязываю DataSource каким-то образом. Кто-нибудь видел, что случилось с этим:DataGridView не отображает DataTable

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, но ничего не появляется.

Любые мысли?

ответ

0

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

Try связывания DataGridView непосредственно к BindingSource, а не DataSource в BindingSource в:

this.dataGridView1.DataSource = bindingSource; 
1

Наряду с выше решения также исправить " bindingSource "свойство datamember. например:

bindingSource.DataMember = yourDataSet.DataTable; 

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

удачи.

+0

Это на самом деле то, что я делаю с этой строкой здесь: bindingSource.DataSource = reader.GetDataTable(); –

+0

вы устанавливаете свойство datasoure bindingSource ... не свойство DataMember вашего источника данных ... есть разница. –

+0

Я знаю это в старой Q, но наткнулся на него. Я получаю сообщение об ошибке при попытке вашего предложения. Asad, VS жалуется: «Значение типа System.Data.DataTable не может быть преобразовано в String» – Dan

0

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

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

Смежные вопросы