Здравствуйте! Сегодня: Вс, 25 Авг 2019, Ваш IP: 34.238.194.166 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Проблемма с изменением цвета строк в DataGridView · +  +  дата добавления: 19.03.2015 / 19:41
Автор темы:
Леонид
Леонид
тем: 22 / ответов: 14 / благодарностей: 0 / репутация: 1
ответов: 14
создал(а) тем: 22


Приветствую всех! Нужна помощь в освоении DataGridView. Проблемма: Имеется таблица с acces в DataGridView1 оставляю только 1-ю колонку, а в ней строки, но есть строки типа ХХХХХ а есть типа ХХХХХ**, так вот те , что с ХХХХХ** нужно подкрасить в другой цвет, но вот реализовать не получается...Где ошибаюсь направьте пожалуйста... вот кусок кода:

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim XX, YY, ZZ As Double
        Dim ppp As Integer 'счетчик количества строк содержащих ‘XXXX**’
        XX = TextBox4.Text 'считываем в переменную содержание текстовых полей
        YY = TextBox5.Text 'считываем в переменную содержание текстовых полей
        ZZ = TextBox6.Text 'считываем в переменную содержание текстовых полей
        DT.Clear() 'Очищаем таблицу
'формируем запрос с условием:
        SqlCom = New OleDb.OleDbCommand("SELECT_ [Код],[TipKT],[Structure],[Uke],[Ikmax],[Pkmax],[H21e] FROM [DanTR] where [Pkmax] >= " & Str(XX) & " and [Ikmax]>=" & Str(YY) & " and [Uke]>=" & Str(ZZ) & "", Con)
             Con.Open() ' Открываем соединение
        SqlCom.ExecuteNonQuery() 'Выполняем запрос
        DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
        DA.Fill(DT) ' Заполняем результатами таблицу
        Me.DataGridView1.DataSource = DT ' Привязываем DataGridView к источнику данных
        DataGridView1.AllowUserToAddRows = False ' Удаляем последнюю пустую строку если есть
        Dim ss As Integer ' Объявляем счетчик
        For J As Integer = 0 To DataGridView1.RowCount - 1
            ss = InStr(1, DataGridView1.Item(1, J).Value.ToString(), "**")
' Проверка на: если есть строки с ‘XXXX**’ и если есть закрашиваем в синий цвет
            If ss <> 0 Then
                ppp = ppp + 1
' Пробую так:
                Me.DataGridView1.Item(1, J).Style.BackColor = Color.Blue
' Пробую и так:
                Me.DataGridView1.Rows(J).DefaultCellStyle.ForeColor = Color.Blue
            End If
        Next
        TextBox13.Text = ppp' показываем сколько выполненных условий (это так для контроля)
        Con.Close() ' Закрываем соединение
' Скрываю колонки не нужные для отображения, оставляем только 1-ю
        DataGridView1.RowHeadersVisible = False
        DataGridView1.Columns(0).Visible = False
        DataGridView1.Columns(2).Visible = False
        DataGridView1.Columns(3).Visible = False
        DataGridView1.Columns(4).Visible = False
        DataGridView1.Columns(5).Visible = False
        DataGridView1.Columns(6).Visible = False
        DataGridView1.Visible = True
    End Sub

Заранее спасибо за внимание!
Технологии: Visual Basic .NET
 
Ответ # 1 # · +  +  дата добавления: 20.03.2015 / 12:30
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


ForeColor - это цвет шрифта.
BackColor - фон.

Синий фон всей строки:
Me.DataGridView1.Rows(J).DefaultCellStyle.BackColor = Color.Blue
Все через DefaultCellStyle. Белый цвета шрифта:
Me.DataGridView1.Rows(J).DefaultCellStyle.ForeColor = Color.White
ss = InStr(1, DataGridView1.Item(1, J).Value.ToString(), "**")
' Проверка на: если есть строки с ‘XXXX**’ и если есть закрашиваем в синий цвет
If ss <> 0 Then
По-современному, будет так:
ss = DataGridView1.Item(1, J).Value.ToString().IndexOf("**")
' Проверка на: если есть строки с ‘XXXX**’ и если есть закрашиваем в синий цвет
If ss <> -1 Then
 
Ответ # 2 # · +  +  дата добавления: 26.03.2015 / 15:22
Автор ответа:
Леонид
Леонид
тем: 22 / ответов: 14 / благодарностей: 0 / репутация: 1
ответов: 14
создал(а) тем: 22


Спасибо за ответ, но результат не изменился.
Результат положительный только в случае повторного нажатия на Butoon2. Но Почему? Так и не разобрался...
Вышел из положения только так:

Dim knok As Integer
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
...........
..........
knok = knok + 1
If knok = 1 Then Button2_Click(sender, e)
End Sub

??????????????????????????????
 
Ответ # 3 # · +  +  дата добавления: 26.03.2015 / 17:29
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А цикл срабатывает после первого нажатия?
Можно добавить перед циклом код:
MessageBox.Show(DataGridView1.RowCount)
Чтобы проверить, есть строки в DataGridView1 или нет. Если будет ноль, то цикл не будет работать, т.к. получается, что данных в DataGridView1 на тот момент нет.

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

Вторая потенциальная проблема может быть в условии, которое определяет, нужно красить строку или нет. Если убрать это условие, все строки будут подкрашиваться?
 
Ответ # 4 # · +  +  дата добавления: 30.03.2015 / 13:13
Автор ответа:
Леонид
Леонид
тем: 22 / ответов: 14 / благодарностей: 0 / репутация: 1
ответов: 14
создал(а) тем: 22


Добавил проверку перед циклом "MessageBox.Show(DataGridView1.RowCount)" строки не пустые, условие вообще исключил строки так и не подкрашиваются...
 
Ответ # 5 # · +  +  дата добавления: 30.03.2015 / 17:20
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Значит что-то другое удаляет изменения...

Нужен код проекта.

У меня, с показанным ниже кодом, все работает, как положено:
Public Class Form1
  Private DT As New DataTable

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim XX, YY, ZZ As Double
    Dim ppp As Integer 'счетчик количества строк содержащих ‘XXXX**’
    'XX = TextBox4.Text 'считываем в переменную содержание текстовых полей
    'YY = TextBox5.Text 'считываем в переменную содержание текстовых полей
    'ZZ = TextBox6.Text 'считываем в переменную содержание текстовых полей
    DT.Clear()
    DT.Columns.Add("a")
    DT.Columns.Add("b")
    DT.Columns.Add("c")

    DT.Rows.Add("1", "ХХХХХ", "123")
    DT.Rows.Add("2", "ХХХХХ**", "123")
    DT.Rows.Add("3", "ХХХХХ", "123")
    DT.Rows.Add("4", "ХХХХХ**", "123")
    DT.Rows.Add("5", "ХХХХХ", "123")

    'формируем запрос с условием:
    'SqlCom = New OleDb.OleDbCommand("SELECT_ [Код],[TipKT],[Structure],[Uke],[Ikmax],[Pkmax],[H21e] FROM [DanTR] where [Pkmax] >= " & Str(XX) & " and [Ikmax]>=" & Str(YY) & " and [Uke]>=" & Str(ZZ) & "", Con)
    ' Con.Open() ' Открываем соединение
    ' SqlCom.ExecuteNonQuery() 'Выполняем запрос
    'DA = New OleDb.OleDbDataAdapter(SqlCom) 'Через адаптер получаем результаты запроса
    'DA.Fill(DT) ' Заполняем результатами таблицу
    Me.DataGridView1.DataSource = DT ' Привязываем DataGridView к источнику данных
    DataGridView1.AllowUserToAddRows = False ' Удаляем последнюю пустую строку если есть
    Dim ss As Integer ' Объявляем счетчик
    For J As Integer = 0 To DataGridView1.RowCount - 1
      ss = DataGridView1.Item(1, J).Value.ToString().IndexOf("**")
      ' Проверка на: если есть строки с ‘XXXX**’ и если есть закрашиваем в синий цвет
      If ss <> -1 Then
        ppp = ppp + 1
        ' Пробую так:
        Me.DataGridView1.Rows(J).DefaultCellStyle.BackColor = Color.Blue
        ' Пробую и так:
        'Me.DataGridView1.Rows(J).DefaultCellStyle.ForeColor = Color.Blue
      End If
    Next
    'TextBox13.Text = ppp ' показываем сколько выполненных условий (это так для контроля)
    'Con.Close() ' Закрываем соединение
    ' Скрываю колонки не нужные для отображения, оставляем только 1-ю
    DataGridView1.RowHeadersVisible = False
    DataGridView1.Visible = True
  End Sub
End Class
 
Ответ # 6 # · +  +  дата добавления: 03.04.2015 / 20:29
Автор ответа:
Леонид
Леонид
тем: 22 / ответов: 14 / благодарностей: 0 / репутация: 1
ответов: 14
создал(а) тем: 22


Но код-то пока сырой, страниц на 10 как его выложить? просто скопировать? Не вижу где прикрепить файл?
 
Ответ # 7 # · +  +  дата добавления: 03.04.2015 / 23:08
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Через расширенную форму
 
Страница: 1 + Создать новую тему