Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение двух гридов!!! / 25 сообщений из 26, страница 1 из 2
07.06.2005, 12:10:34
    #33104469
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
испытала работу 2 гридов: 1) Janus gridex, 2) True dbgrid.
вот что получилось:
+
1) у 1 есть recordnavigator, встроенный в ячейку календарь, сортировка по столбцам как в explorer (появляется стрелочка вверх, вниз), свойство newrowpos (положение новой записи: вверху или внизу), и самое главное, подцепляемый в настройках рекордсет (ни в одном гриде еще такой функции не было). остальные функции схожи со вторым.

2) у 2 есть marquestyle. очень полезная вещь. позволяет подкрашивать выделяемую ячейку. есть еще вверху строка для фильтра (filterbar). и еще есть свойство showcolumnfooters. у 1 я его не нашла. остальное похоже.

Вопрос: есть ли какой-нибудь грид, который смог объединить в себя 2 этих пункта, т.е. достоинства 1 и 2 гридов, которые я перечислила? я не нашла его, может кто знает. подскажите!!!
...
Рейтинг: 0 / 0
07.06.2005, 12:48:41
    #33104638
Valery_Muhin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Это например DevExpress QuantumGrid
...
Рейтинг: 0 / 0
07.06.2005, 12:53:23
    #33104651
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
там точно все-все характеристики, которые я взяла с двух гридов, присутствуют? и recordnavigator, и рекордсет, подсоединяемый в свойствах, и filterbar?
...
Рейтинг: 0 / 0
07.06.2005, 15:05:44
    #33105086
chenosov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Рекомендую еще посмотреть VSFlexGrid, которым я пользуюсь с 2000 года. Что есть у него:
1. Просто огромное количество событий, свойств и методов на все случаи жизни.
2. Возможность очень легкого перемещения строк с помощью мыши путем минимального программирования.
3. Легко можно использовать любой собственный контрол (попап, календарь и т.д. ) для ввода значения в ячейку.
4. Построение деревянных структур.
5. Частичное и полное подсуммирование.
6. Использование графики в ячейках
7. Сохранение и восстановление информации между гридом и массивом.
8. Сохранение и восстановление информации грида на диск.
9. Для каждой ячеки можно прописать буквально все свойства (шрифт, цвет, фона, выравнивание и т.д.)
10. Возможность знать старое и новое значение ячейки при окончании редактирования.
11. Практическая работа с ячейками грида, как с элементами массива.
12. Возможность именования колонок, а сл-но обращения к ним по имени, а не по индексу.
13. И много-много всякого другого, сейчас не упомню.
...
Рейтинг: 0 / 0
08.06.2005, 05:50:01
    #33106222
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
нет, vsflexgrid мне не подходит. посмотрела quantrumgrid.
немного не то, что я хотела. там нет recordnavigator, и filter как в excele. а мне нужна просто строка, где я сама могу написать sql-запрос.
...
Рейтинг: 0 / 0
08.06.2005, 10:39:25
    #33106526
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
вместе с True dbgrid поставляется Truedatacontrol, ложишь его на форму, подцепляешь тот же рекордсет - и вот тебе recordnavigator; щелчок на caption обрабатываешь, устанавливая свойство sort, равное полю колонки, по caption которой щелкнули - и вот у тебя сортировка столбцов; Set TDBGrid.DataSource = рекордсет, и вот у тебя подцеплен рекордсет

про календарик тоже написать, или сами сообразим показать календарь при щелчке на ячейку?

янус - тоже хороший грид, quantrumgrid - вообще супер, гридов, в которых просто надо писать sql и больше ВООБЩЕ ничего не делать - ИМХО НЕТ, даже в акцессе и в poweb builder'овском datawindow(ИМХО: лучший грид на свете) приходится уйму кода писать
------------------
arbeit macht frei
...
Рейтинг: 0 / 0
08.06.2005, 10:44:01
    #33106540
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
да, с True DBgrid я полностью разобралась. всё бы ничего, но особенно меня смущает тот факт, что надо сортировку кодом писать. в остальных гридах она автоматическая. а так пока для меня это самый лучший грид.
...
Рейтинг: 0 / 0
08.06.2005, 11:00:43
    #33106601
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Bob, не могли бы вы подробнее об этом sort. можно код.
...
Рейтинг: 0 / 0
08.06.2005, 13:31:46
    #33107165
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
НастенькаBob, не могли бы вы подробнее об этом sort. можно код.

первый щелчок - сортировка по этому полю asc, щелкаешь снова - desc, потом без сортировки и так по кругу, картиночка в заголовок колонки подгружается, где показано куда отсортированы записи

Private Sub TDBGrid1_HeadClick(ByVal ColIndex As Integer)
Dim max_col As Long
Dim i As Long
Dim msg As Long
Dim key_str_str As String
Dim rs As ADODB.Recordset 'РЕКОРДСЕТ
Dim str_sq As String
Dim str_sq2 As String
On Error Resume Next
Set rs = New ADODB.Recordset
str_sq = s.last_kv_select
Call sql_parts(str_sq)
str_sq2 = strselect & " " & strwhere & " "
''Очистка от старых сортировок
'Set TDBGrid1.DataSource = s.rs_kontr_vrem("")
max_col = TDBGrid1.Columns.Count - 1
''Очистка столбцов от картинок
If ColIndex <> 100 Then
For i = 0 To max_col
TDBGrid1.Splits(0).Columns(i).HeadingStyle.ForegroundPicturePosition = dbgFPTextOnly
Next i

If pr_s_s = ColIndex Then
If pr_s > 1 Then pr_s = 0 Else pr_s = pr_s + 1
Else
pr_s_s = ColIndex
For i = 0 To max_col
TDBGrid1.Splits(0).Columns(i).HeadingStyle.ForegroundPicturePosition = dbgFPTextOnly
Next i
pr_s = 1
End If
If pr_s = 1 Then
TDBGrid1.Splits(0).Columns(ColIndex).HeadingStyle.ForegroundPicturePosition = 2

rs.Source = str_sq2 & " order by " & TDBGrid1.Columns(ColIndex).DataField & " ASC"


TDBGrid1.Splits(0).Columns(ColIndex).HeadingStyle.ForegroundPicture = LoadResPicture(101, vbResBitmap)
ElseIf pr_s = 0 Then
rs.Source = str_sq2
'Set TDataLite1.DataSource = s.rs_kontr_vrem("")

Else
TDBGrid1.Splits(0).Columns(ColIndex).HeadingStyle.ForegroundPicturePosition = 2
rs.Source = str_sq2 & " order by " & TDBGrid1.Columns(ColIndex).DataField & " DESC"

TDBGrid1.Splits(0).Columns(ColIndex).HeadingStyle.ForegroundPicture = LoadResPicture(102, vbResBitmap)

End If
'If ColIndex = 2 Then MsgBox "Сортировка по этому полю НЕВОЗМОЖНО!!!", vbInformation
End If
pr_s_s = ColIndex

rs.ActiveConnection = s.cnn_upr
rs.CursorLocation = adUseServer
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.Open


Set TDataLite1.DataSource = rs
Set TDBGrid1.DataSource = TDataLite1
Set TDBGrid2.DataSource = s.rs_user
Set Me.txtprim.DataSource = TDataLite1

Set rs = Nothing


End Sub
...
Рейтинг: 0 / 0
08.06.2005, 14:35:23
    #33107345
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Настенькано особенно меня смущает тот факт, что надо сортировку кодом писать. в остальных гридах она автоматическая. а так пока для меня это самый лучший грид.
Ну это скорее достоинство чем недостаток.
Два довода:
1. Сортировку можно провести по нескольким выделенным колонкам. (Переместить сортируемые колонки в порядке сортриовки - выделить - отстортировать. По-моему удобнее чем разрабатывать для этого отдельную форму).
2. Сортировку можно провести используя другое (невидимое) поле. Например, есть видимое текстовое поле "Номер+Литера" и есть скрытое поле "Номер". Или еще пример: запрос возвращает вместо Null фразу "Нет данных" и нам надо такие строчки закинуть в конец списка или в начало.

И это - совсем не экзотические требования.
...
Рейтинг: 0 / 0
08.06.2005, 15:08:05
    #33107426
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Код в поддержку агументов в пользу TDBGrid:
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
Public Sub SortGrid_Common(ByRef Grid As TrueOleDBGrid70.TDBGrid, _
                           ByRef rs As ADODB.Recordset, _
                           ByVal Направление As String)
   Dim c As TrueOleDBGrid70.Column
   Dim i As Long, s_Sort As String
   Dim s_Направление As String
   Dim Sel_End As Long
   On Error GoTo Err_SRT
   If Направление = "ASC" Then s_Направление = " ASC" Else s_Направление = " DESC"
   Grid.Enabled = False
   With Grid
      If .SelStartCol >=  0  Then
         If .SelEndCol >=  0  Then Sel_End = .SelEndCol Else Sel_End = .SelStartCol
         s_Sort = vbNullString
         For i = .SelStartCol To Sel_End
            b_Найдена = False             'Ищем колонку, соответствующую месту расположения на гриде
            For Each c In .Columns
               If c.Visible Then          'Пропустим те колонки, которые не видны
                  If c.Order = i Then
                     b_Найдена = True
                     Exit For
                  End If
               End If
            Next c
            If b_Найдена Then
               If Len(c.DataField) >  0  Then     'Здесь можно проверить на соответствие специальному полю
                                                'и вставить поле его подменяющее
                  If s_Sort = vbNullString Then
                     s_Sort = "[" & c.DataField & "] " & s_Направление
                  Else
                     s_Sort = s_Sort & ", [" & c.DataField & "] " & s_Направление
                  End If
               End If
            End If
         Next i
         rs.Sort = s_Sort
      Else     'Нет выделения колонок - по ячейке
         Set c = Grid.Columns(Grid.Col)
         If Len(c.DataField) >  0  Then        'Здесь можно проверить на соответствие специальному полю
                                             'и вставить поле его подменяющее
            s_Sort = "[" & c.DataField & "]" & s_Направление
         End If
         rs.Sort = s_Sort
         Grid.Col = c.ColIndex
      End If
   End With
   Set c = Nothing
   GoTo EndErr_SRT
Err_SRT:
   MsgBox Err.Description, vbExclamation, "Сортировка записей"
EndErr_SRT:
   On Error Resume Next
   Grid.Enabled = True
End Sub

Private Sub btnASC_Click()
   SortGrid_Common Me.TDBGrid1, rsGrid_a, "ASC"
End Sub

Private Sub btnDESC_Click()
   SortGrid_Common Me.TDBGrid1, rsGrid_a, "DESC"
End Sub
...
Рейтинг: 0 / 0
09.06.2005, 11:02:52
    #33108794
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Странно, а че так много кода? я сама сделала сортировку. вот код, работает без ошибок.

Private Sub TDBGrid1_HeadClick(ByVal ColIndex As Integer)
For I = 0 To TDBGrid1.Columns.Count - 1
TDBGrid1.Columns(I).HeadFont.Bold = False
TDBGrid1.Columns(I).HeadingStyle.ForegroundPicture = Null
Next I
If rcd.State = 1 Then rcd.Close
rcd.CursorLocation = adUseClient
If a = 1 Then
rcd.Sort = rcd.Fields(ColIndex).Name & " Asc"
TDBGrid1.Columns(ColIndex).HeadingStyle.ForegroundPicture = LoadPicture(App.Path & "\1.bmp")
a = 2
Else
rcd.Sort = rcd.Fields(ColIndex).Name & " Desc"
TDBGrid1.Columns(ColIndex).HeadingStyle.ForegroundPicture = LoadPicture(App.Path & "\2.bmp")
a = 1
End If
rcd.Open
Set TDBGrid1.DataSource = rcd
TDBGrid1.Columns(ColIndex).HeadFont.Bold = True
End Sub

я прямо в коде подгружаю картинку. и еще на form_load переменной
a = 1. и всё.
...
Рейтинг: 0 / 0
09.06.2005, 11:05:14
    #33108806
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
еще подскажите, пож-та. как сделать универсальный фильтр (rcd.filter), который будет корректно фильтровать и стринговые поля, и integer, и smalldatetime. у меня пока ничего не получается.
...
Рейтинг: 0 / 0
09.06.2005, 12:10:06
    #33109041
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Универсальный фильтр :-) хотя и не совсем оно.
...
Рейтинг: 0 / 0
09.06.2005, 12:25:25
    #33109093
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Что-то там много всего. мне нужно совсем немного кода.
пример: пишу

rcd.filter = 'name like ' '" & text1.text & "*''.
это работает, когда name - string. например, мы не знаем его типа,
оно может быть 3 типов: string, integer, smalldatetime.

нужно написать эту строку, чтобы она работала корректно для этих трех типов.
...
Рейтинг: 0 / 0
09.06.2005, 12:35:35
    #33109139
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
авторЧто-то там много всего. мне нужно совсем немного кода.
Может там и много написано, зато есть ответы на все твои вопросы.

автормы не знаем его типа,
оно может быть 3 типов:

Почему это не знаем? rcd.Fields(x).Type еще никто не отменял.
...
Рейтинг: 0 / 0
09.06.2005, 12:51:07
    #33109189
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
про type понятно. проверять тип, и в зависимости от него, писать фильтр. а может можно как-нибудь универсально для всех типов, не проверяя тип поля?
...
Рейтинг: 0 / 0
09.06.2005, 12:59:39
    #33109228
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Ну, примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    On Error Resume Next
    d = CDate(Grid.Text)
    If Format(d, "dd.mm.yy") = Grid.Text And Err.Number =  0  Then 'или какой там формат
        'Форматируем как дату
    ElseIf Err.Number =  0  Then
        'Форматируем как число (только целое)
    Else
        'строка
    End If
...
Рейтинг: 0 / 0
09.06.2005, 13:01:11
    #33109235
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
О, это хороший пример. сейчас его проверю.
...
Рейтинг: 0 / 0
24.07.2005, 15:28:04
    #33181642
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
_bobSet TDBGrid.DataSource = рекордсет, и вот у тебя подцеплен рекордсет

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

cmd.ActiveConnection = cn
cmd.CommandText = "sp_who"
cmd.CommandType = adCmdStoredProc
Set rs = cmd.Execute
Set TDBGrid.DataSource = rs

и ничего :( в гриде только одна пустая строчка. при этом, если проверить, rs содержит ответ от sp_who.

может чего не хватает? help please
...
Рейтинг: 0 / 0
25.07.2005, 08:45:58
    #33181891
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Надо выполнить TDBGrid1.ClearFields
или в дизайнере очистить все настройки, связанные с типом источника данных грида и его колонок.

Если в дизайнере настроить одно из:
-Указать DataSource и т.п.
-Определить DataField хотя бы для одной колонки
то грид не принимает настройки нового рекордсета (остается со старыми настройками)
...
Рейтинг: 0 / 0
25.07.2005, 08:52:44
    #33181897
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Имеется в виду то, что настройки сделанные для одного рекордсета в дизайн-тайм не позволят потом отображать данные другого рекордсета (если имена полей другие).
...
Рейтинг: 0 / 0
25.07.2005, 09:50:55
    #33181966
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Недавно обсуждалось.
cn.CursorLocation = adUseClient
rs.Open cmd, ,adOpenStatic, adLockBatchOptimistic
set rs.ActiveConnection = Nothing (не обязятельно)

WorobjoffИмеется в виду то, что настройки сделанные для одного рекордсета в дизайн-тайм не позволят потом отображать данные другого рекордсета (если имена полей другие).

Колонки действительно будут пустыми, но количество строчек будет соответствовать прикрученному рекордсету. Проблема в рекордсете, а не в колонках грида.
...
Рейтинг: 0 / 0
25.07.2005, 10:45:46
    #33182073
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
AntonariyКолонки действительно будут пустыми, но количество строчек будет соответствовать прикрученному рекордсету. Проблема в рекордсете, а не в колонках грида.
Точно, я ж на его код совсем не посмотрел!
Как всегда лень прочитать внимательно.
...
Рейтинг: 0 / 0
25.07.2005, 10:50:12
    #33182082
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение двух гридов!!!
Так а как тогда получить recordset и отобразить его в True DBGrid ?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение двух гридов!!! / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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