powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TrueDBGrid и покраска отдельных ячеек в нем
20 сообщений из 20, страница 1 из 1
TrueDBGrid и покраска отдельных ячеек в нем
    #35904730
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спрашивала здесь раньше, никто не ответил мне. Пишу еще раз, т.к. проблема очень актуальная для меня.
Есть truedbgrid1, в нем такие значения:

Код: plaintext
1.
2.
3.
4.
5.
f1	f2	f3	f4
Иванов	24	20	12
Петров	23	-3	
Иванов	20	4	45
Сидоров	30	5	
Попов	45	6	78

Необходимо сделать в гриде так, чтобы:
1. Если в столбце f1 фамилия Иванов, то сделать заливку f2 синим.
2. Если в f3 значение отрицательное, то сделать шрифт красным.
3. Если f4 не пустое, то выделяем зеленым.

Нужно сделать разное форматирование для 3 колонок.
Пробовала использовать fetchcellstyle, но он действует для всех колонок, и не для каждой в отдельности. Еще есть addregexstyle, но он действует только на 1 колонку, и на пустые в ней проверить не удалось. Помогите пожалуйста.

Вот что должно в итоге получиться:
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35905389
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поможет.
Я например для VSFlexGrid делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To VSFlexGrid1.Rows -  1  
          For n =  3  To  6  '***** с 3-й по 6-й колонки Fam Red in Col  !!!
          If InStr(VSFlexGrid1.Cell(flexcpText, i, n), "что-то") Then
          VSFlexGrid1.Cell(flexcpBackColor, i, n) = vbRed
             End If
             Next n
       Next i
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35905464
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может Вам пригодится: Msflexgrid, окраску произвожу так:
Код: plaintext
1.
2.
3.
MSFlexGrid1.col =  3 
MSFlexGrid1.CellBackColor = &HC0FFFF ' окраска в желтоватый цвет
MSFlexGrid1.col =  4 
MSFlexGrid1.CellBackColor = &HC0FFC0 ' окраска в зеленоватый цвет
При этом окрашивание делаю при заполнении грида, главный минус, медленовато делает если много строк для раскраски. Для большого кол-во вывода данных не использую.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910300
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, нужно именно для TrueDBGRID. отзовитесь владельцы. Очень нужно. Про другие гриды прошу не писать.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910362
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910369
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть вот так, с тегами тут пока не освоился:
ссылка TrueDBGrid
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910752
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Настенька так и не научилась пользоваться кнопкой F2)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Dim rs As New ADODB.Recordset

Private Sub Form_Load()
    rs.Fields.Append "Field1", adVarChar,  100 
    rs.Fields.Append "Field2", adVarChar,  100 
    rs.Open
    For x =  1  To  10 
        rs.AddNew
        s = ""
        For y =  1  To  10 
            s = s & Chr( 65  + Rnd( 1 ) *  65 )
        Next
        rs!Field1 = s
        s = ""
        For y =  1  To  10 
            s = s & Chr( 65  + Rnd( 1 ) *  65 )
        Next
        rs!Field2 = s
    Next
    TDBGrid1.Columns( 0 ).FetchStyle = dbgFetchCellStyleColumn
    TDBGrid1.Columns( 1 ).FetchStyle = dbgFetchCellStyleColumn
    Set TDBGrid1.DataSource = rs
End Sub

Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid80.StyleDisp)
    CellStyle.BackColor = RGB(Rnd *  255 , Rnd *  255 , Rnd *  255 )
End Sub
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910778
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, TDBGrid1.Columns(0).FetchStyle не сработает. Нужно открыть окно свойств, закладку Splits, выбрать Columns и выставить это свойство колонкам руками.

Одна проблема — текст пропадает.

kiv-1980
По ссылке про ячейки нет ни слова.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910808
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон еще раз, я не проставил DataField колонкам, если это сделать, то все работает и ничего не пропадает.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35910847
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да прошу прощения, по ссылочке сам искал ничего не нашел.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35911204
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем покопался с этим TrueDbGrid, получилось следующее, закрашивать получилось по условиям, нашел это в стандартной справке по TrueDBGrid, сформируйте запрос, выставьте timer:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Form_Load()
      'здесь можно указакть заполнение и т.д.
      Call Timer1_Timer 'запуск таймера
End Sub

Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid70.StyleDisp)
    ' Выделение зеленым цветом если условие = 1
    If TDBGrid1.Columns(Col).CellText(Bookmark) = "" Then Exit Sub 'если нет текста то сброс
    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  1  Then 'если отвечает условию то фон ячейки зеленый
        CellStyle.BackColor = vbGreen
    End If
End Sub

 
Private Sub Timer1_Timer()
 Set RSClone = TDataLite1.Recordset.Clone
    TDBGrid1.Columns( 0 ).FetchStyle = True 'прохождение по первому столбцу
    TDBGrid1.Columns( 1 ).FetchStyle = True 'прохождение по второму столбцу
    TDBGrid1.Columns( 2 ).FetchStyle = True 'прохождение по третьему столбцу
    TDBGrid1.Refresh
End Sub

Немного грубовато но работает. Также этот способ работает уже со сформированным гридом.
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35911209
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не нужно, просто не убрал....
Код: plaintext
Set RSClone = TDataLite1.Recordset.Clone
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35911298
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще проще:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Command1_Click()
    .......... 'формируем Грид
    TDBGrid1.Columns( 0 ).FetchStyle = True
    TDBGrid1.Columns( 1 ).FetchStyle = True
    TDBGrid1.Columns( 2 ).FetchStyle = True
    TDBGrid1.Refresh
End Sub

Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid70.StyleDisp)
    'Выставляем свои условия, как нам нужно (CellStyle - BackColor и ForeColor)
    If TDBGrid1.Columns(Col).CellText(Bookmark) =  "Иванов" Then
        CellStyle.BackColor = vbRed
    End If
    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  1  Then 
        CellStyle.BackColor = vbGreen
    End If

    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  2  Then 
        CellStyle.BackColor = vbYellow
    End If

    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  3  Then 
        CellStyle.ForeColor = vbRed
    End If
End Sub
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35911351
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, да, уже всем все понятно)))
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35911759
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите привычка дурная :), с гридами люблю возиться :)
TrueTDBGrid был первым с которого я начинал, но пришел к msflexgrid1, он наиболее отвечал моим простейшим требованиям :) и я ни разу не пожалел о своем выборе...
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35913474
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, извините меня еще раз, но опять проблема.

Если делаешь вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid80.StyleDisp)
    If TDBGrid1.Columns( [b]0 [/b]).CellText(Bookmark) = "35" Then
        CellStyle.BackColor = vbRed
    End If
    If TDBGrid1.Columns( [b]1 [/b]).CellValue(Bookmark) = "3" Then
        CellStyle.BackColor = vbGreen
    End If
End Sub

то почему-то выделяет целую строку, а не ячейки.

а если далеть вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid80.StyleDisp)
    If TDBGrid1.Columns(col).CellText(Bookmark) = "35" Then
        CellStyle.BackColor = vbRed
    End If
    If TDBGrid1.Columns(col).CellValue(Bookmark) = "3" Then
        CellStyle.BackColor = vbGreen
    End If
End Sub

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

вот высылаю скриншот, как получается при первом примере, и как во втором.

Что делать в таких случаях?
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35913516
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вам нужно выделять только один столбец например 2, нужно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub Command1_Click()
    .......... 'формируем Грид
    TDBGrid1.Columns( 1 ).FetchStyle = True 
    TDBGrid1.Refresh
End Sub

Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid70.StyleDisp)
    'Выставляем свои условия
    If TDBGrid1.Columns(Col).CellText(Bookmark) = "Иванов" Then
        CellStyle.BackColor = vbRed
    End If
    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  1  Then 'переменная Col должна присутствовать и ее убирать нельзя
        CellStyle.BackColor = vbGreen
    End If
End Sub

А если хотите чтобы проходился по одному столбцу и при этом ничего не меняя с FetchStyle:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Command1_Click()
    .......... 'формируем Грид
    TDBGrid1.Columns( 0 ).FetchStyle = True 
    TDBGrid1.Columns( 1 ).FetchStyle = True 
    TDBGrid1.Columns( 2 ).FetchStyle = True 
    TDBGrid1.Refresh
End Sub

Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer, ByVal CellStyle As TrueOleDBGrid70.StyleDisp)
    'Выставляем свои условия
    If col =  1  Then 'только для второго столбца
    If TDBGrid1.Columns(Col).CellText(Bookmark) = "Иванов" Then
        CellStyle.BackColor = vbRed
    End If
    End If

    If TDBGrid1.Columns(Col).CellValue(Bookmark) =  1  Then 'переменная Col должна присутствовать и ее убирать нельзя
        CellStyle.BackColor = vbGreen
    End If
End Sub
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35913518
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И любая раскраска будет зависеть уже от Ваших условий, Вам их менять и проставлять ничего не мешает, я раскрасил свой грид в разноцветное полотнище :).
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35913668
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык колонку проверять нужно.
Private Sub TDBGrid1_FetchCellStyle(ByVal Condition As Integer, ByVal Split As Integer, Bookmark As Variant, ByVal Col As Integer , ByVal CellStyle As TrueOleDBGrid70.StyleDisp)
...
Рейтинг: 0 / 0
TrueDBGrid и покраска отдельных ячеек в нем
    #35913711
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо огромное всем, Вы супер!!! Все получилось.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TrueDBGrid и покраска отдельных ячеек в нем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]