1 (изменено: chippp, 2014-11-04 19:22:40)

Тема: AHK: ListView с произвольным,неизвестным количеством столбцов

Итак что бы представлять суть вопроса:
Есть скрипт который выполняет через ADO SQL запрос
Возвращаемые данные:
Заголовок1,Заголовк2,Заголовок3 ..... ЗаголовокX
Результат11,Результат21,Результат31 ..... РезультатX1
Результат1n,РЕзультат2n,Результат3n ..... РезультатXn

Соответственно добавить необходимое количество столбцов я могу (где CurrStr - строка с заголовками ).


Loop, parse, CurrStr, `,
{
LV_InsertCol(A_Index,,A_LoopField)
}

Вопрос, как мне добавить в ListView строки с данными, ведь заранее количество столбцов я не знаю, а согласно синтаксиса Lv_Add и Lv_Insert требует явного указания позиции данных добавляемых в строку LV_Add([Options, Field1, Field2, ...]).

Заранее спасибо.

2 (изменено: chippp, 2014-11-04 19:22:27)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Конечно костылем можно сделать:

If (ColsNum = 1)
.....
If (ColsNum = 2)
.....
If (ColsNum = X)

где ColsNum - количество столбцов, и задать так штук 100, но не красиво, не удобно.

3

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

заранее количество столбцов я не знаю,

В конце цикла переменная A_Index будет содержать число заголовков.

4 (изменено: chippp, 2014-11-04 19:22:18)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Это понятно, но заранее я не знаю количество результатов.
И как добавить LV_Add(, Результат1, Результат2, ..., РезультатX) не заная заранее количество результатов в строке ?

5

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Зачем заранее? В процессе добавления, это ведь будет ясно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Получается, у Вас необходимое число  ячеек в строке может расходиться с заданным числом колонок?
Я однажды решал очень схожую задачу и сперва перебирал все исходные данные, дабы узнать максимальное количество ячеек в строке.

7

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

serzh82saratov пишет:

Зачем заранее? В процессе добавления, это ведь будет ясно.

Меня смущает то, что заранее оговорены заголовки.
chippp, заголовки - это заголовки столбцов, не так ли?

8 (изменено: chippp, 2014-11-04 19:22:03)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Представляем следующую ситуацию, делаем селект из БД.


select TOP 5 * 
from TEST_DATABASE
where Code = 10

Так как мы выполняем селект * то сказать сколько столбцов вернется заранее не можем, пусть возвращается следующая структура, с разделителем ";".

Code;Name;Sifr
10;MyName1;1950
10;MyName2;1960
10;MyName3;1970
10;MyName4;1980
10;MyName5;1990

Получив все данные в переменной (например data) можно добавить заголовки столбцов.

Loop, Parse, data, `n
{
        StrNum:=A_Index
        CurrStr:=A_LoopField
        
            If (A_Index = 1)
            {
                Loop, parse, CurrStr, `;
                {
                    LV_InsertCol(A_Index,,A_LoopField)
                }
            }

If (A_Index > 1)
{
LV_Add ?????????? Вот тут то и озникает вопрос как добавить эти данные?
}
}

И в GUI мы создаем элемент LIstView без заданого количества столбцов.

Gui, Add, ListView, x5 y5 w100 h100,

9 (изменено: chippp, 2014-11-04 19:21:35)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

ypppu пишет:
serzh82saratov пишет:

Зачем заранее? В процессе добавления, это ведь будет ясно.

Меня смущает то, что заранее оговорены заголовки.
chippp, заголовки - это заголовки столбцов, не так ли?

Именно, полученные в первой строке selectom из SQL базы.

10 (изменено: chippp, 2014-11-04 19:21:26)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

ypppu пишет:

Получается, у Вас необходимое число  ячеек в строке может расходиться с заданным числом колонок?
Я однажды решал очень схожую задачу и сперва перебирал все исходные данные, дабы узнать максимальное количество ячеек в строке.

Не может, данные для таблицы возвращает SQL запрос, размерность однозначна, но заранее не известна.

11

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

chippp, у нас принято ставить точки в конце предложений, отредактируйте свои посты.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Верну новые сообщения после исправлений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Вроде поставил...........

14

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Alectric пишет:

Можно переработать все данные в массивы с a_index, а затем уже "перерисовывать" таблицу, опираясь на большее количество столбцов. ypppu это имел в виду... наверно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

ypppu пишет:

Заголовок1,Заголовк2,Заголовок3 ..... ЗаголовокX
Результат11,Результат21,Результат31 ..... РезультатX1
Результат1n,РЕзультат2n,Результат3n ..... РезультатXn

Code;Name;Sifr
10;MyName1;1950
10;MyName2;1960
10;MyName3;1970
10;MyName4;1980
10;MyName5;1990

Я так и не понял, в чём проблема. В обоих примерах в первой же строке перечислены имена будущих столбцов через разделитель. Значит разбираем первую строку командой Loop (parse a string) и подсчитываем количество элементов. A_Index будет содержать число будущих столбцов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

serzh82saratov пишет:

data1 =
(
Code;Name;Sifr
10;MyName1;1950
10;MyName2;1960
10;MyName3;1970
10;MyName4;1980
10;MyName5;1990 
)

data2 =
(
Code;Name
10;MyName1
10;MyName2
10;MyName3
)

Gui, Add, ListView, vLV
Gui, Show  
ListViewInsert(data1), ListViewInsert(data2), ListViewInsert(data1)
 
ListViewInsert(data)  {
    Sleep 1000
    GuiControl, -Redraw, LV
    LV_Delete()
    Loop % LV_GetCount("Col")
        LV_DeleteCol(LV_GetCount("Col")) 
    Loop, Parse, data, `n 
        For k, v in StrSplit(A_LoopField, "`;"), i := A_Index
            (i = 1 ? LV_InsertCol(k, , v) : (k = 1 ? LV_Insert(i-1, "Col" k, v) : LV_Modify(i-1, "Col" k, v))) 
    Loop % LV_GetCount("Col")
        LV_ModifyCol(A_Index, "AutoHdr")
    GuiControl, +Redraw, LV
} 
Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

Затупил я однако. Всем огромное спасибо. Все работает.

18 (изменено: serzh82saratov, 2014-11-05 00:27:08)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

chippp
Немного подредактировал:


data1 =
(
Code;Name;Sifr
10;MyName1;1950
10;MyName2;1960
10;MyName3;1970
10;MyName4;1980
10;MyName5;1990 
)

data2 =
(
Code;Name
10;MyName1
10;MyName2
10;MyName3
)

Gui, Add, ListView, vLV
Gui, Show  
ListViewInsert(data1), ListViewInsert(data2), ListViewInsert(data1)

ListViewInsert(data)  {
    Sleep 1000
    GuiControl, -Redraw, LV
    LV_Delete()
    Loop % LV_GetCount("Col")
        LV_DeleteCol(1) 
    Loop, Parse, data, `n 
        For k, v in StrSplit(A_LoopField, "`;"), i := A_Index
            (i = 1 ? LV_InsertCol(k, , v) : (k = 1 ? LV_Insert(i-1, "Col" k, v) : LV_Modify(i-1, "Col" k, v))) 
    Loop % LV_GetCount("Col")-1
        LV_ModifyCol(A_Index, "AutoHdr") 
    LV_InsertCol(LV_GetCount("Col")+1), LV_ModifyCol(LV_GetCount("Col")-1, "AutoHdr"), LV_DeleteCol(LV_GetCount("Col"))
    GuiControl, +Redraw, LV 
} 

Или ты решил как то по другому?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19 (изменено: chippp, 2014-11-04 23:03:02)

Re: AHK: ListView с произвольным,неизвестным количеством столбцов

serzh82saratov, нет воспользовался твоим решением, спасибо. Только тернарные операторы на обычные IFы разобрал, как то тяжко мне с ними. Конечно не перл однострочный, но люблю четко прослеживающуюся структуру .
Что-то я чувствую не внимательно по ListView справку читал, всем еще раз огромное спасибо.