Автор |
Сообщение |
Mr.Zakk Wylde Crazy Guitarist |
|
В общем ситуация такова - нужно создать базу данных такого типа на MFC
Сначала показалось не трудно, но затем столкнулся с рядом сложностей:
1) Как сделать ListControl из EditBox'ов, т.е. чтобы заносимые данные можно было редактировать прямо в списке?
2) Как добавлять элементы в конец списка? Т.е. чтобы они появлялись один за другим - 0,1,2 и т.д. А то у меня появляются так - 0, затем элемент сам сдвигается на позицию 1, а вместо него появляется новый с позицией 0 и т.д.
Понимаю что здесь нужен цикл для какого-то увеличивающегося I, но что-то я адски туплю и ничего не выходит(
3) Как считать данные из ListControl'a чтобы он заносил их в файл, а потом загружать их обратно с помощью диалога?
Вот пока основные вопросы, возникшие у меня по ходу выполнения работы.
Заранее спасибо!
P.S. Советы по поводу MSDN, Google и прочее не нужны. Если бы я там нашел что хотел, сюда бы не обращался. |
|
|
|
|
Mr.Zakk Wylde Crazy Guitarist |
|
Блин блинский!...Это потеря потерь...( |
|
|
|
|
dipp Эксперт |
|
Если не принципиально создавать свой обработчик для редактирования данных в ячейках, то можно использовать готовый компонент.
http://www.codeproject.com/KB/list/Extended_List_Control.aspx
Добавление итемов последовательно делается очень просто:
Код: |
int i=0;
ListCtrl.AddItem(i, "text");
//добавляем субитемы
ListCtrl.SetItem(i, 1, "name");
ListCtrl.SetItem(i, 2, "group");
//новый итем
i++;
ListCtrl.AddItem(i, "text2");
... |
Данные считываются через
Код: |
CString GetItemText(
int nItem,
int nSubItem
) const;
|
Записывать и читать можно через sprintf() и sscanf() в цикле.
При сохранении вытаскивать данные из столбиков и сохранять их в виде "%s\t%s\t%s" (разделять через табуляцию), потом sscanf'ом считывать, он все раскидает как надо.
p.s. В МСДНе и Гугле все прекрасно ищется. |
|
|
|
|
Mr.Zakk Wylde Crazy Guitarist |
|
Вот пожалуйста.
Код: |
void 123Dlg::OnBnClickedButton1()
{
UpdateData(true);
int i=0;
LIST.InsertItem(i,(EDIT));// вставляю строку и новое значение ячейки фамилии
LIST.SetItemText(i, i+1,(EDITBOX));// значение ячейки имени
i++;
UpdateData(false);
} |
Не пашет.
Цикл нужен. |
|
|
|
|
dipp Эксперт |
|
А теперь правильный ответ:
Код: |
void ClistctrltestDlg::OnBnClickedButton1()
{
//выделяем всю строку
listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
listctrl.InsertColumn(0, L"Name",0, 100);
listctrl.InsertColumn(1, L"Surname",0, 100);
listctrl.InsertColumn(2, L"Group",0, 100);
int i=0;
listctrl.InsertItem(i, L"johny");
listctrl.SetItemText(i, 1, L"blade");
listctrl.SetItemText(i, 2, L"pp2-55");
i++;
listctrl.InsertItem(i, L"michael");
listctrl.SetItemText(i, 1, L"stinson");
listctrl.SetItemText(i, 2, L"pp2-54");
i++;
listctrl.InsertItem(i, L"vova");
listctrl.SetItemText(i, 1, L"putin");
listctrl.SetItemText(i, 2, L"pp2-51");
//и так далее
}
|
Результат
|
|
|
|
|
|
Аватары: Вкл|Выкл ЮзерИнфо: Вкл|Выкл Подписи: Вкл|Выкл
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы можете скачивать файлы
|
|