2017-02-17 5 views
1

У меня есть представление datagrid, и я импортирую значения Excel в этом datagrid, но я не вижу обратных цветов ячеек. Вот мой код и фотография.VB.Net datagrid import excel cell с цветом

Как я могу передавать цвета из Excel в datagrid?

[enter image description here

Dim cmb As New DataGridViewComboBoxColumn() 
    cmb.HeaderText = "Colum1" 
    cmb.Name = "cmb" 
    cmb.Items.Add("Select for Main Plot") 
    cmb.Items.Add("Select") 
    DataGridView1.Columns.Add(cmb) 

    Dim conn As OleDbConnection 
    Dim dta As OleDbDataAdapter 
    Dim dts As DataSet 
    Dim excel As String 
    Dim OpenFileDialog As New OpenFileDialog 

    OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments 
    OpenFileDialog.Filter = "All Files (*.*)|*.*|Excel files (*.xlsx)|*.xlsx|CSV Files (*.csv)|*.csv|XLS Files (*.xls)|*xls" 

    If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then 
    End If 

    Dim fi As New FileInfo(OpenFileDialog.FileName) 
    Dim FileName As String = OpenFileDialog.FileName 

    excel = fi.FullName 
    conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excel + ";Extended Properties=Excel 12.0;") 
    dta = New OleDbDataAdapter("Select * From [Sayfa1$]", conn) 
    dts = New DataSet 
    dta.Fill(dts, "[Sayfa1$]") 
    DataGridView1.DataSource = dts 
    DataGridView1.DataMember = "[Sayfa1$]" 
    conn.Close() 
+0

Ожидается, что OleDbConnection будет считывать данные из вашего файла excel, а не форматировать ячейки и передавать их в DataGridView. Вы здесь по своему усмотрению. – Steve

+0

Ваше предложение здесь – Emrah

ответ

0

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

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

Другой вариант ставится эта логика в событии CellFormatting. Таким образом, цвет будет применен, когда DataGridView будет инициализирован данными, а также изменится, если пользователь изменит значение ячейки.

Поскольку ваш опубликованный код не показывает этого, вам, возможно, потребуется скорректировать код ниже для ваших нужд.

Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting 
    Dim cellValue As String 
    Dim row As DataGridViewRow 
    row = DataGridView1.Rows(e.RowIndex) 
    If (Not row.IsNewRow) Then 
    cellValue = row.Cells(e.ColumnIndex).Value 
    If (cellValue IsNot Nothing) Then 
     row.Cells(e.ColumnIndex).Style.BackColor = GetColor(cellValue) 
    End If ' ignore empty cells 
    End If ' ignore new row 
End Sub 

Private Function GetColor(colorValue As String) As Color 
    Select Case colorValue 
    Case "1" 
     GetColor = Color.FromArgb(245, 129, 109) 
    Case "2" 
     GetColor = Color.FromArgb(251, 129, 113) 
    Case "3" 
     GetColor = Color.FromArgb(252, 155, 119) 
    Case "4" 
     GetColor = Color.FromArgb(250, 186, 119) 
    Case "5" 
     GetColor = Color.FromArgb(253, 208, 130) 
    Case "6" 
     GetColor = Color.FromArgb(253, 236, 129) 
    Case "7" 
     GetColor = Color.FromArgb(215, 224, 130) 
    Case "8" 
     GetColor = Color.FromArgb(178, 213, 130) 
    Case "9" 
     GetColor = Color.FromArgb(139, 201, 128) 
    Case "10" 
     GetColor = Color.FromArgb(100, 189, 122) 
    Case Else 
     GetColor = Color.White 
    End Select 
End Function