2016-07-07 2 views
0

Я новичок в vb.net и пытаюсь отобразить результаты с сервера mysql в своем datagridview. Может кто-нибудь может указать, что случилось с моим кодом? Заранее спасибо.Почему мой datagridview не показывает никаких результатов?

Оставьте мою строку подключения для обеспечения безопасности, но она действительно соединяется. И если я ставлю точку останова в коде он делает заполнить набор данных с правильными данными

Dim con As New MySqlConnection("server=;user id=;password=;database=") 
    con.Open() 

    Dim adp As New MySqlDataAdapter("Select CONCAT(FirstName,' ',Surname) as Name, LeaveDaysAvailable as 'Leave Days Available' from leave_database.Employees;", con) 

    Dim ds As New DataSet() 
    adp.Fill(ds) 

    dgvMain.DataSource = ds 


    con.Close() 

Это результат. Никакие ошибки .... enter image description here

это не результат, если я запустить тот же запрос в MySQL Workbench

enter image description here

ответ

2

А DataSet не содержит данных напрямую. Он имеет коллекцию Tables, которая содержит DataTable объектов, и каждый из них содержит данные. Если вы присвоите DataSet собственности DataSource вашего DataGridView, вам необходимо также установить свойство DataMember, чтобы сообщить ему, что DataTable, чтобы получить данные.

Проблема в том, что вы не указали свой DataTable, так что вам нечего назначать DataMember. Эта линия:

adp.Fill(ds) 

фактически создает DataTable, заполнит его и добавляет его в Tables коллекции. У этого нет имени, поэтому у вас нет имени, чтобы установить DataMember. Сначала вам нужно называть DataTable, например.

adp.Fill(ds, "MyDataTable") 

, а затем вы можете установить DataMember:

dgvMain.DataMember = "MyDataTable" 
dgvMain.DataSource = ds 

Альтернативой является просто связать DataTable вместо DataSet, в этом случае вам не нужно имя:

dgvMain.DataSource = ds.Tables(0) 

Дело в том, зачем создавать DataSet в первую очередь, если вы собираетесь использовать только один номер DataTable? Просто создайте DataTable. Затем вы можете передать это DataTable на звонок Fill и присвоить его DataSource.

+0

ОК прохладного спасибо :) я понимаю, что теперь, но как бы я определил это? Я знаю, что с помощью comboboxes вы устанавливаете значение и отображаете элементы, но как установить столбцы в dgv? –

+0

круто :) если я хочу пойти с datatable способом, что бы я написал? –

+0

благодарит за вашу помощь. dgvMain.DataSource = ds.Tables (0) работал :) Я оставил dataGridView1.AutoGenerateColumns = true; in aswell :) –

1

dataGridView1.AutoGenerateColumns = true;

Else Вы должны добавить столбцы в сетку данных вы можете сделать это с помощью дизайнера файла или из кода, как

DataGridTextColumn textColumn = new DataGridTextColumn(); 
dataColumn.Header = "First Name"; 
dataColumn.Binding = new Binding("Name"); 
dataGrid.Columns.Add(textColumn); 

DataGridTextColumn textColumn = new DataGridTextColumn(); 
dataColumn.Header = "Leave day available"; 
dataColumn.Binding = new Binding("LeaveDaysAvailable"); 
dataGrid.Columns.Add(textColumn); 

Использования дизайнера это будет могут помочь вам https://msdn.microsoft.com/en-us/library/dyyesckz(v=vs.100).aspx

+0

Вам не нужно добавлять колонки самостоятельно. Они будут добавляться автоматически по умолчанию при связывании, если вы правильно привязываетесь. Вам нужно будет только добавить столбцы самостоятельно, если вы хотите связать их во время разработки или хотите, кроме столбцов по умолчанию, например. вам нужны столбцы со списком. – jmcilhinney

+0

Я думаю, что вы должны попробовать попробовать код – jitender

+0

Или вам нужны данныеGridView1.AutoGenerateColumns = true; – jitender

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