Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TrueDBGrid и покраска отдельных ячеек в нем / 20 сообщений из 20, страница 1 из 1
01.04.2009, 05:33
    #35904730
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Спрашивала здесь раньше, никто не ответил мне. Пишу еще раз, т.к. проблема очень актуальная для меня.
Есть 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
01.04.2009, 12:18
    #35905389
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Если поможет.
Я например для 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
01.04.2009, 12:45
    #35905464
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Может Вам пригодится: Msflexgrid, окраску произвожу так:
Код: plaintext
1.
2.
3.
MSFlexGrid1.col =  3 
MSFlexGrid1.CellBackColor = &HC0FFFF ' окраска в желтоватый цвет
MSFlexGrid1.col =  4 
MSFlexGrid1.CellBackColor = &HC0FFC0 ' окраска в зеленоватый цвет
При этом окрашивание делаю при заполнении грида, главный минус, медленовато делает если много строк для раскраски. Для большого кол-во вывода данных не использую.
...
Рейтинг: 0 / 0
03.04.2009, 12:09
    #35910300
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Нет, нужно именно для TrueDBGRID. отзовитесь владельцы. Очень нужно. Про другие гриды прошу не писать.
...
Рейтинг: 0 / 0
03.04.2009, 12:25
    #35910362
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
...
Рейтинг: 0 / 0
03.04.2009, 12:27
    #35910369
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
То есть вот так, с тегами тут пока не освоился:
ссылка TrueDBGrid
...
Рейтинг: 0 / 0
03.04.2009, 14:22
    #35910752
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
А Настенька так и не научилась пользоваться кнопкой 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
03.04.2009, 14:30
    #35910778
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Прошу прощения, TDBGrid1.Columns(0).FetchStyle не сработает. Нужно открыть окно свойств, закладку Splits, выбрать Columns и выставить это свойство колонкам руками.

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

kiv-1980
По ссылке про ячейки нет ни слова.
...
Рейтинг: 0 / 0
03.04.2009, 14:39
    #35910808
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Пардон еще раз, я не проставил DataField колонкам, если это сделать, то все работает и ничего не пропадает.
...
Рейтинг: 0 / 0
03.04.2009, 14:51
    #35910847
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Да прошу прощения, по ссылочке сам искал ничего не нашел.
...
Рейтинг: 0 / 0
03.04.2009, 16:23
    #35911204
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Вообщем покопался с этим 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
03.04.2009, 16:24
    #35911209
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Это не нужно, просто не убрал....
Код: plaintext
Set RSClone = TDataLite1.Recordset.Clone
...
Рейтинг: 0 / 0
03.04.2009, 16:52
    #35911298
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Можно еще проще:

Код: 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
03.04.2009, 17:12
    #35911351
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Да, да, уже всем все понятно)))
...
Рейтинг: 0 / 0
03.04.2009, 23:04
    #35911759
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Простите привычка дурная :), с гридами люблю возиться :)
TrueTDBGrid был первым с которого я начинал, но пришел к msflexgrid1, он наиболее отвечал моим простейшим требованиям :) и я ни разу не пожалел о своем выборе...
...
Рейтинг: 0 / 0
06.04.2009, 06:06
    #35913474
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Господа, извините меня еще раз, но опять проблема.

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

Код: 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
06.04.2009, 08:23
    #35913516
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Если Вам нужно выделять только один столбец например 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
06.04.2009, 08:27
    #35913518
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
И любая раскраска будет зависеть уже от Ваших условий, Вам их менять и проставлять ничего не мешает, я раскрасил свой грид в разноцветное полотнище :).
...
Рейтинг: 0 / 0
06.04.2009, 10:11
    #35913668
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Дык колонку проверять нужно.
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
06.04.2009, 10:32
    #35913711
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TrueDBGrid и покраска отдельных ячеек в нем
Спасибо огромное всем, Вы супер!!! Все получилось.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TrueDBGrid и покраска отдельных ячеек в нем / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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