2013-09-07 4 views
0

Im снова с другим DataGidView вопросComboBox Колонка в DataBound DataGridView

я создаю приложение, которое позволяет пользователю создавать билет на продукты, приобретенные

Эта форма состоит из DataGidViewwhich позволяет пользователю записывать детали продукта вместе с информацией о ценах и количестве.

В настоящее время DataGidView связан данные и данные сохраняются с помощью адаптера данных и команд строитель во время выполнения

Столбцы создаются автоматически, а затем я установить свойства, такие как параметры форматирования следующим образом

Private Sub SetTicketList() 

    Try 
     Con.ConnectionString = CropTrackMod.strConn 
     SQLAdaptor.SelectCommand = New SqlClient.SqlCommand("SELECT ID, StockRef, Weight, EstimatedPrice, DespatchedQuantity,EstimatedTransportPer,VATRate, EstimatedTransportTotal,EstimatedVAT, EstimatedLineTotal,TicketRef FROM TicketDetail where ticketref ='x'", Con) 
     builder = New SqlClient.SqlCommandBuilder(SQLAdaptor) 
     Con.Open() 

     Dim myTable As DataTable = New DataTable 
     SQLAdaptor.Fill(myTable) 

     dgvTicketDetail.DataSource = myTable 

     'ID Column 
     dgvTicketDetail.Columns(0).Visible = False 

     'StockRef 
     dgvTicketDetail.Columns(1).HeaderText = "StockRef" 
     dgvTicketDetail.Columns(1).CellType. 

     'Weight 
     dgvTicketDetail.Columns(2).HeaderText = "Weight" 
     dgvTicketDetail.Columns(2).DefaultCellStyle.Format = "0" 
     dgvTicketDetail.Columns(2).DefaultCellStyle.NullValue = "0" 

     'Price Per Unit 
     dgvTicketDetail.Columns(3).HeaderText = "Price" 
     dgvTicketDetail.Columns(3).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(3).DefaultCellStyle.NullValue = "0.00" 

     'Quantity 
     dgvTicketDetail.Columns(4).HeaderText = "Quantity" 
     dgvTicketDetail.Columns(4).DefaultCellStyle.Format = "0" 
     dgvTicketDetail.Columns(4).DefaultCellStyle.NullValue = "0" 

     'Transport Cost Per Unit 
     dgvTicketDetail.Columns(5).HeaderText = "TransportCostPer" 
     dgvTicketDetail.Columns(5).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(5).DefaultCellStyle.NullValue = "0.00" 

     'VAT Rate 
     dgvTicketDetail.Columns(6).HeaderText = "VAT Rate" 
     dgvTicketDetail.Columns(6).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(6).DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns(6).ReadOnly = True 

     'Transport Total 
     dgvTicketDetail.Columns(7).HeaderText = "Transport Total" 
     dgvTicketDetail.Columns(7).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(7).DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns(7).ReadOnly = True 

     'VAT Total 
     dgvTicketDetail.Columns(8).HeaderText = "VAT Total" 
     dgvTicketDetail.Columns(8).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(8).DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns(8).ReadOnly = True 

     'line Total 
     dgvTicketDetail.Columns(9).HeaderText = "Total" 
     dgvTicketDetail.Columns(9).DefaultCellStyle.Format = "0.00" 
     dgvTicketDetail.Columns(9).DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns(9).ReadOnly = True 


     'line Total 
     dgvTicketDetail.Columns(10).HeaderText = "TicketRef" 
     dgvTicketDetail.Columns(10).Visible = False 
    Finally 
     If Con.State = ConnectionState.Open Then 
      Con.Close() 
     End If 
    End Try 

End Sub 

Один из столбцов для ссылки на фондовый, в тот момент, когда я могу освободить тип этого поля, но в конечном итоге я хотел бы, чтобы это был столбец combobox, где пользователь может выбрать из списка ссылок на акции из другой таблицы.

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

Dim dgvc As DataGridViewComboBoxCell 
dgvc = DataGridView1.Rows(0).Cells(2) 

if DataGridView1.Rows(0).Cells(1).Value = "Jack" then 
    dgvc.Items.Add("Fe") 
    dgvc.Items.Add("Fi") 
elseif DataGridView1.Rows(0).Cells(3).Value = "Giant" then 
    dgvc.Items.Add("Fo") 
    dgvc.Items.Add("Fum") 
End if 

Изначально я планировал вручную добавлять элементы в выпадающий список, но я видел примеры возможности привязки элементов РУЧНОГО COLUMN СОЗДАНИЕ. Я полагаю, что это еще одна проблема в другой раз

Любая помощь всегда приветствуется.

Заранее спасибо ребята

ответ

0

я решил проблему, отключив столбцы AutoGenerate с DataGridView и вручную добавлять каждый столбец. Это позволило мне создать столбец combobox и добавить к этому варианты. Дальнейшее усовершенствование этого будет добавить источник данных в столбец поле со списком так, чтобы он автоматически загружает элементы из фондовой таблицы

код следующим

Private Sub SetTicketListTemp() 

    Try 
     Con.ConnectionString = CropTrackMod.strConn 
     SQLAdaptor.SelectCommand = New SqlClient.SqlCommand("SELECT ID, StockRef, Weight, EstimatedPrice, DespatchedQuantity,EstimatedTransportPer,VATRate, EstimatedTransportTotal,EstimatedVAT, EstimatedLineTotal,TicketRef FROM TicketDetail where ticketref ='x'", Con) 
     builder = New SqlClient.SqlCommandBuilder(SQLAdaptor) 
     Con.Open() 

     Dim myTable As DataTable = New DataTable 
     SQLAdaptor.Fill(myTable) 

     dgvTicketDetail.AutoGenerateColumns = False 
     dgvTicketDetail.DataSource = myTable 

     'ID Column 
     Dim col1 As New DataGridViewTextBoxColumn 
     col1.DataPropertyName = "ID" 
     col1.HeaderText = "ID" 
     col1.Name = "ID" 
     col1.Visible = False 
     dgvTicketDetail.Columns.Add(col1) 


     'StockRef 
     Dim col2 As New DataGridViewComboBoxColumn 
     col2.DataPropertyName = "StockRef" 
     col2.HeaderText = "StockRef" 
     col2.Name = "StockRef" 

     col2.Items.Add("StockItem1") 
     col2.Items.Add("StockItem2") 

     dgvTicketDetail.Columns.Add(col2) 


     'Weight 
     Dim col3 As New DataGridViewTextBoxColumn 
     col3.DataPropertyName = "Weight" 
     col3.HeaderText = "Weight" 
     col3.Name = "Weight" 
     col3.DefaultCellStyle.Format = "0" 
     col3.DefaultCellStyle.NullValue = "0" 
     dgvTicketDetail.Columns.Add(col3) 

     'Price Per Unit 
     Dim col4 As New DataGridViewTextBoxColumn 
     col4.DataPropertyName = "EstimatedPrice" 
     col4.HeaderText = "Price" 
     col4.Name = "Price" 
     col4.DefaultCellStyle.Format = "0.00" 
     col4.DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns.Add(col4) 

     'Quantity 
     Dim col5 As New DataGridViewTextBoxColumn 
     col5.DataPropertyName = "DespatchedQuantity" 
     col5.HeaderText = "Quantity" 
     col5.Name = "Quantity" 
     col5.DefaultCellStyle.Format = "0" 
     col5.DefaultCellStyle.NullValue = "0" 
     dgvTicketDetail.Columns.Add(col5) 

     'Transport Cost Per Unit 
     Dim col6 As New DataGridViewTextBoxColumn 
     col6.DataPropertyName = "EstimatedTransportPer" 
     col6.HeaderText = "TransportCostPer" 
     col6.Name = "TransportCostPer" 
     col6.DefaultCellStyle.Format = "0.00" 
     col6.DefaultCellStyle.NullValue = "0.00" 
     dgvTicketDetail.Columns.Add(col6) 


     'VAT Rate 
     Dim col7 As New DataGridViewTextBoxColumn 
     col7.DataPropertyName = "VATRate" 
     col7.HeaderText = "VAT Rate" 
     col7.Name = "VATRate" 
     col7.DefaultCellStyle.Format = "0.00" 
     col7.DefaultCellStyle.NullValue = "0.00" 
     col7.ReadOnly = True 
     dgvTicketDetail.Columns.Add(col7) 

     'Transport Total 
     Dim col8 As New DataGridViewTextBoxColumn 
     col8.DataPropertyName = "EstimatedTransportTotal" 
     col8.HeaderText = "Transport Total" 
     col8.Name = "TransportTotal" 
     col8.DefaultCellStyle.Format = "0.00" 
     col8.DefaultCellStyle.NullValue = "0.00" 
     col8.ReadOnly = True 
     dgvTicketDetail.Columns.Add(col8) 

     'VAT Total 
     Dim col9 As New DataGridViewTextBoxColumn 
     col9.DataPropertyName = "EstimatedVAT" 
     col9.HeaderText = "VAT Total" 
     col9.Name = "VATotal" 
     col9.DefaultCellStyle.Format = "0.00" 
     col9.DefaultCellStyle.NullValue = "0.00" 
     col9.ReadOnly = True 
     dgvTicketDetail.Columns.Add(col9) 

     'line Total 
     Dim col10 As New DataGridViewTextBoxColumn 
     col10.DataPropertyName = "EstimatedLineTotal" 
     col10.HeaderText = "Total" 
     col10.Name = "Total" 
     col10.DefaultCellStyle.Format = "0.00" 
     col10.DefaultCellStyle.NullValue = "0.00" 
     col10.ReadOnly = True 
     dgvTicketDetail.Columns.Add(col10) 



     'TicketRef 
     Dim col11 As New DataGridViewTextBoxColumn 
     col11.DataPropertyName = "TicketRef" 
     col11.HeaderText = "TicketRef" 
     col11.Name = "TicketRef" 
     col11.Visible = False 
     dgvTicketDetail.Columns.Add(col11) 

    Finally 
     If Con.State = ConnectionState.Open Then 
      Con.Close() 
     End If 
    End Try 

End Sub 

надеюсь, что это поможет кому-то, что застревает

Удачи

4

Я только что сделал что-то подобное, что я чувствую себя более гибким, что было вдохновлено этим, поэтому я подумал, что поделюсь. Главное преимущество заключается в том, что вам не нужно отключать автоматическое создание столбцов. Это происходит после того, как я уже установил источник данных datagridviews (dgvPickList) в datatable, а также загрузил список адресов в datLatations datatable. Он заменяет вторую колонку, которая была привязана к полю «Место»

Dim comboBoxColumn As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn() 
comboBoxColumn.HeaderText = "Location" 
comboBoxColumn.DataPropertyName = "Location" 
comboBoxColumn.DataSource = dtLocations 
comboBoxColumn.ValueMember = dtLocations.Columns(0).ColumnName 
comboBoxColumn.DisplayMember = dtLocations.Columns(1).ColumnName 

dgvPickList.Columns.RemoveAt(1) 
dgvPickList.Columns.Insert(1, comboBoxColumn) 

Надеюсь, это полезно.

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