Помогите в коде заполнить грид и скрыть идентификаторы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Помогите в коде заполнить грид и скрыть идентификаторы

Сообщение sergey-911 » 25.03.2005 (Пт) 1:04

Доброго времени суток уважаемые!
Собственно, нужно заполнить грид (хотелось бы msFlexGrid)

Код: Выделить всё
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
   
    query = "SELECT * "
    query = query & "FROM vw_UserManager"

    Set cn = New ADODB.Connection
    cn.Open (Soedinenie)   'Soedinenie - параметры подключения
       
    Set rs = cn.Execute(query & where & " ORDER BY Fam")
       
    'Очистка грида

    Do Until rs.EOF

        'Добавление записи в грид

        rs.fields(0).value          'надо в цикле присвоить
        rs.fields(1).value          'данные гриду
        'и т.д.
        rs.fields("ID").value      'идентификатор (который нужно скрыть с глаз)

        rs.MoveNext

    Loop
                       
    rs.Close
    Set rs = Nothing
    Set cn = Nothing


Хочу знать, как правильно заполнить грид, сортировать данные в нем, осуществлять поиск, при нажатии клавиши на гриде, заполнять грид в несколько строк в 1 ячейке (wrap) и [u]скрыть[\u] столбцы (ID1, ID2) с идентификаторами.

Порекомендуйте гриды для этой цели.

Простите за ламерский вопрос.
Буду признателен любой информации.
:D
С уважением, Сергей.

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 25.03.2005 (Пт) 8:07

Лично я пользуюсь ListView, насчет скрытия столбцов - вроде бы в нем такого нет (поправте меня если не так). Как вариант, просто не включать ненужные столбцы в таблицу. Если надо всяки примочки в сетке - то это уже коммерческие контролы.
Что бы данные отображались ввиде таблицы (сетки). В пропертях поставь View: - 3lwreport,
чтобы отображались лини сетки - включи проперть gridlines.
Очистка: ListView1.ListItems.Clear
Столбцы можно добавлять на этапе разработки в дизайнере (в пропертях - Columnheaders->insertcolumn).
Можно кодом добавлять столбцы:
Код: Выделить всё

ListView1.ColumnHeaders.Add , , "столбец1"
ListView1.ColumnHeaders.Add , , "столбец2"
ListView1.ColumnHeaders.Add , , "столбец3"
ListView1.ColumnHeaders.Add , , "столбец4"
'....и т.д.


Заполнешь так:
Первый столбец в listview - listitems(номер_строки)
Остальные столбцы соответсвенно: 2-й - listitems(номер_строки).subitems(1), 3-й - listitems(номер_строки).subitems(2) и т.д.

Код: Выделить всё

Do Until rs.EOF
  Set a = Form1.ListView1.ListItems.Add(, , rs.fields("имя_1-го_столбца"))
  a.SubItems(1) = rs.Fields("столбец2")
  a.SubItems(2) = rs.Fields("столбец3")
  '... и т.д. скока надо тебе столбцов выводить
  rs.MoveNext
Loop


Сортировка:
Можно на этапе проектирования в пропертях закладка Sorting, включи sorted и укажи номер столбца по которому будет сортировать.
Можно сделать сортровку по нажатию на шапку столбца (имя столбца):
Событие нажатия на шапку столбца:

Код: Выделить всё

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
SortListView ListView1, ColumnHeader
End Sub


Насчет поиска средствами listview признаться не знаю: есть или нет.
Я ищу сам: в цикле по каждой строке и по каому столбцу надо, можно по всем ячейкам искать - в зависимости от задачи. попробуй может подойдет для тебя.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Re: Помогите в коде заполнить грид и скрыть идентификаторы

Сообщение snov » 25.03.2005 (Пт) 10:52

sergey-911 писал(а):Порекомендуйте гриды для этой цели.
VSFlexGrid. rulezzz

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 25.03.2005 (Пт) 20:06

Алексей К.
Спасибо за помощь. Дело в том, что я использовал ListView в своих прложениях. Со скроллом заморачиваться не нужно, поиск идет по первой колонке. Но все не то. А скрыть я от пользователя хочу идентификаторы. Без ни - никуда. Можно в свойство Tag их запихнуть - но не удобно. Я так и не разобрался, как это делается. Да и внешне мне этот контрол не очень.

Сегодня на работе начитался умных книжек, MSDN, аж голова распухла. В общем я понял, как добавить и скрыть колонки в DataGrid. Потом стал искать, как заполнить строки. Долго искал, пока не нашел в MSDN фразу, в которой говорится, что заполняется ентот грид только через DataSet, а как в ListView - неполучится. Нельзя в коде добавить.

Потом стал изучать свойства MSFlexGrid и MSHFlexGrid. Сами контролы мне меньше понравились, хотя у них есть собственный метод поиска. В них можно определить число строк и столбцов, заполнить данными. Но я так и не нашел, как скрыть столбцы со служебной информацией. Может кто знает, как это сделать. Плиз, очень нужно. Только не предлагайте свести ширину етих колонок до нуля. Пробовал - никатит.

Нет ли у кого библиотек с True VSFlexGridPro и True VSHFlexGridPro. Коммерческие гриды, вроде бы покруче рассмотренных выше. У меня они есть, но демки. Работают 30 дней и отрубаются, попутно натоедая рекламой, при каждом закрытии формы.

В общем, тема не закрыта, жду от Вас помощи. Может, кто знает, как скрыть идентификаторы в FlexGrid или добавить стоки в DataGrid?
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 25.03.2005 (Пт) 20:08

snov
Помоему, VSFlexGrid это и есть коммерческий контрол, который я ищу. Выложи плиз в этом ДЛЛ-ки его. Буду крайне признателен.
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 26.03.2005 (Сб) 2:15

snov
Согласен полностью, пока. Изучаю. Но силы ужо покидают.
Если кому надо - ссылка здесь

[url]
http://download.componentone.com/videos ... .1.151.zip
[/url]

Лекарство

Код: Выделить всё
[HKEY_CLASSES_ROOT\Licenses\403E0785-49A9-11d3-9BD5-D2DC2DD96072]
@=""
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 26.03.2005 (Сб) 16:21

Уважаемые, кто-нибудь знает, как узнать количество строк и столбцов в сетке VSFlexGrid. Должно же быть свойство COUNT, или что-то наподобие. И еще. Есть ли здесь закладки и как перейти на эту закладку, а также на строку, текст которой мы знаем не периберая заново весь грид (поиск по сетке). Грид заполняется из базы ручками, а не свойством DataSourse.
С уважением, Сергей.

snov
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 28.11.2003 (Пт) 10:12
Откуда: Челябинск

Сообщение snov » 25.04.2005 (Пн) 14:19

sergey-911 писал(а):Уважаемые, кто-нибудь знает, как узнать количество строк и столбцов в сетке VSFlexGrid. Должно же быть свойство COUNT, или что-то наподобие. И еще. Есть ли здесь закладки и как перейти на эту закладку, а также на строку, текст которой мы знаем не периберая заново весь грид (поиск по сетке). Грид заполняется из базы ручками, а не свойством DataSourse.

Количество строк: VSFlexGrid1.Rows или VSFlexGrid1.FixedRows
Количество столбцов: VSFlexGrid1.Cols или VSFlexGrid1.FixedCols
Про закладки не понял

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 26.04.2005 (Вт) 16:32

Если VSFlexGrid, то ширину колонок можно определить через
VSFlexGrid1.ColWidth(Номер_колонки) = Ширина
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 05.05.2005 (Чт) 23:16

VSFlexGrid1.SelectedRows - для поиска строк, которые пользователь выделил мышкой, удерживая кнопку Ctrl.
VSFlexGrid1.FindRow - для поиска значений в таблице, свойствами самого грида VSFlexGrid. Работает все несравнимо быстрее, нежели все переберать в цикле по всему гриду. :roll:

Код: Выделить всё
    Dim c As Long
    Dim ID() As Long
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim Rezult As String
    Rezult = VSFlexGrid1.Text
   
    ReDim Preserve ID(0)
    ID(0) = Col                                 'Запоминаем положение № колонки (последний щелчок мыши)
   
    VSFlexGrid1.Col = VSFlexGrid1.Cols - KolID  'ID (Скрытый столбец)
    ReDim Preserve ID(1)
    ID(1) = VSFlexGrid1.Text                    'Запоминаем ID (последний щелчок мыши)
   
    For c = 0 To VSFlexGrid1.SelectedRows - 1   'Перебераем все выделенные записи
        ReDim Preserve ID(c + 2)                'Массив с номерами выделенных строк, в нулевом - № колонки, в первом - значение ID
        ID(c + 2) = VSFlexGrid1.SelectedRow(c)  'Переход к следующей выделенной строке
    Next c
       
    For c = 0 To c - 1                          'Перебераем все записи, которые были выделены
        VSFlexGrid1.Row = ID(c + 2)             'Последовательно присваиваем строке (уже не выделенной) значения всех выделенных строк
        ID(c + 2) = VSFlexGrid1.Text            'Присваиваем массиву, реальные значения идентификатора (в нулевом - № колонки, в первом - значение ID)
        Call SaveRezult(CByte(Col), Rezult, ID(c + 2))
    Next c
       
    FIND (0)                                    'Обновляем результаты в таблице
   
    'V Поиск модифицированной записи**************************************************
    If VSFlexGrid1.FindRow(ID(1), , VSFlexGrid1.Cols - 1, , 1) > 0 Then VSFlexGrid1.Row = VSFlexGrid1.FindRow(ID(1), , VSFlexGrid1.Cols - 1, , 1)
    If VSFlexGrid1.Row < 1 And VSFlexGrid1.Rows > 1 Then VSFlexGrid1.Row = 1
    If VSFlexGrid1.Row > 0 Then VSFlexGrid1.TopRow = VSFlexGrid1.Row
    'A Поиск модифицированной записи**************************************************
    VSFlexGrid1.Col = ID(0)     'Переход на ячейки
       
    For c = 0 To c - 1
        VSFlexGrid1.IsSelected(VSFlexGrid1.FindRow(ID(c + 2), , VSFlexGrid1.Cols - KolID, , 1)) = True
    Next c


А нет ли у кого готового примера, как выводить не из запроса а из таблицы данные на принтер, используя, к примеру VSPrinter, или еще какой-либо объект. Если честно, разбираться в книге - некогда. Да и про компоненты VideoSoft в книгах написано немного. :oops:
С уважением, Сергей.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111

    TopList