Pergunta

Eu tenho o seguinte código que eu acho que deveria vincular um DataTable para um DataGridView, mas os shows DataGridView vazio. O DataTable definitivamente tem linhas, assim que eu supor que eu estou ligando o DataSource incorretamente de alguma forma. Alguém vê o que está errado com este:

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;
  • A primeira linha simplesmente recebe um identificador para o DB que eu estou puxando os dados.
  • A próxima linha é uma fornece uma classe para a leitura desse mesmo db -., Em particular, expõe o método GetDataTable com retornos tabela de dados que pretendo colocar no DataGridView
  • A próxima linha é desinteressante ...
  • A 4ª tentativas de linha para capturar a DataTable - QuickWatch indica que este está funcionando ...
  • A linha final é onde eu supor que eu tenho asneira ... meu entendimento é que este se liga a tabela de dados para o DataGridView GUI, mas nada aparece.

Qualquer pensamento?

Foi útil?

Solução 4

Nada disso funcionou para mim, apesar de tudo parecia como um bom conselho. O que eu acabei fazendo foi o maior pior corte na terra,. O que eu estava esperando para realizar era simplesmente carregar uma tabela DB a partir de um db SQLite e apresentá-lo (somente leitura, com colunas classificáveis) no DataGridView. O DB real seria programaticamente especificado em tempo de execução. I definiu o DataSet, adicionando um DataGridView para o formulário e usado o Wizards para definir estaticamente a seqüência de conexão DB. Depois fui para o arquivo Settings.Designer.cs e acrescentou um acessor set ao DB propriedade seqüência de conexão:

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;
            }
        }
    }
}

Este é um hack klugey, mas funciona. Sugestões sobre como limpar essa bagunça são mais do que bem-vindos.

brian

Outras dicas

Tente ligação do DataGridView diretamente para o BindingSource, e não do BindingSource DataSource:

this.dataGridView1.DataSource = bindingSource;

Você precisa anexar o BindingSource para sua grade, antes de obter a tabela de dados.

Tente mudar as duas últimas linhas de código:

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();

Junto com a acima soluções também corrigir o "BindingSource" DataMember propriedade. como:

bindingSource.DataMember = yourDataSet.DataTable;

Eu tive o mesmo problema com banco de dados SQL e vista datagrid. Depois de uma grande quantidade de problemas que eu descobri que eu esqueci de propriedade dataMember conjunto de minha fonte de ligação.

melhor sorte.

DataGridView leva um DataTable como base. As colunas DataTable salvar seu Tipo como uma propriedade.

Se este tipo é uma interface tudo o que se vê são células vazias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top