2015-05-04 3 views
0

Я пытаюсь показать DataGridView в форме, привязанной к DataTable, но она не отображается. Я делал это с использованием C1TrueDBGrid и работал ... Я решил переключиться на использование DataGridView из-за некоторых осложнений с TrueDBGrid. Может ли кто-нибудь помочь мне разобраться, почему ничего не показывает?DataGridView привязан к DataTable не показывает

В форме я объявляю эти:

Public binData As DataSet 
Friend WithEvents dgvData As System.Windows.Forms.DataGridView 

binData заполняется таблиц, созданных с помощью отдельной подпрограммы вычисления. Тогда это событие формы нагрузки:

'create a tab page and add data grid view for every table in the set 
    For i = 0 To binData.Tables.Count - 1 
     Dim tabPage As C1.Win.C1Command.C1DockingTabPage = New C1.Win.C1Command.C1DockingTabPage 
     tabPage.Text = binData.Tables(i).TableName 
     tabContent.TabPages.Add(tabPage) 

     Dim dgvData = New System.Windows.Forms.DataGridView 
     Dim binding As New BindingSource 
     binding.DataSource = binData.Tables(i) 

     With dgvData 
      .Dock = DockStyle.Fill 
      .AllowUserToOrderColumns = False 
      .AllowUserToAddRows = False 
      .AllowUserToDeleteRows = False 
      .DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft 
      .DataSource = binding 
      .AutoGenerateColumns = True 
     End With 
     tabPage.Controls.Add(dgvData) 
    Next 'DataTable In binData.Tables 

При загрузке формы, вкладка страницы есть и помечены, как и ожидалось, но они выглядят пустыми (без стола).

Я попытался вместо этого установить DataSource в DataSet, называемый binData (в отличие от конкретной таблицы), а затем установить свойство DataMember dgvData на имя конкретной таблицы, которую я хочу отобразить в ней ..., которая не сделала разница.

Примечание: Мне нужно иметь возможность делать это программно во время выполнения, а не с помощью визуального конструктора, потому что я не знаю точное количество сеток, которые мне нужны, пока форма не загрузится с определенным набором данных - набор данных, который он может получить имеют различное количество таблиц в зависимости от того, чего хочет пользователь.

+0

Вы устанавливаете источник данных источника привязки в таблицу, но не устанавливаете источник данных самой сетки на что-либо. – Jeremy

+0

@Jeremy - В блоке With я устанавливаю dgvData .DataSource = binding. Есть ли еще что я должен сделать, чтобы сделать источник данных сетки таблицей? – Andarta

+0

dgvData должен быть элементом управления (GUI), а не переменной. Удалите инструкции Dim/Friend для dgvData и добавьте элемент управления в форму из папки «Данные» в панели инструментов. – rheitzman

ответ

0

Вот некоторые грубые код для добавления dgvs к панели потока:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Static dgvCount As Integer 
    dgvCount += 1 
    Dim dgvNew As New DataGridView 
    dgvNew.Width = DataGridView1.Width 
    dgvNew.Height = DataGridView1.Height 
    dgvNew.Name = "dgv" & dgvCount 
    ' clone other properties as need 
    FlowLayoutPanel1.Controls.Add(dgvNew) 
    Debug.Print(FlowLayoutPanel1.Controls(FlowLayoutPanel1.Controls.Count - 1).Name) 
End Sub 

начинается с одного DGV - dataGridView1 как модель для свойств. Анкеровка не работает на панели потока, поэтому для изменения пользовательского кода может потребоваться изменение ширины.

Панель потока не прокручивается, поэтому не может быть лучшим выбором - загляните в TableLayout как возможность. TabControl - еще один вариант.

0

ОК, ну, оказывается, не было ничего плохого в том, что я делал. Проблема оказалась в одной строке кода, которая не имеет ничего общего с привязкой источника данных DGV или чего-то еще.

У компонента ComponentOne есть элемент управления ThemeController, в котором вы можете устанавливать темы для своих форм и элементов управления внутри. У меня была строка кода для установки темы для dgvData на мою тему приложения по умолчанию (которая устанавливает визуальный стиль и подробности относительно цветов, шрифтов и т. Д.). По какой-то причине THAT не отображал мою сетку. Я буду регистрировать билет с ними.

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