Premnath Mali Ответов: 2

Можем ли мы вставить структуру в элемент управления списком, если mfc


У меня есть студенческая структура, и я хотел сохранить ее в элементе управления списком, как мы можем это сделать?

смотрите в разделе кодирование lstStudent это объект списка

Что я уже пробовал:

struct Student 
{
	char sname[25];
	char id[5];
	char sclass[10];
};
void CStudent::SaveData()
{
	Student s1;
	CString sname,id,sclass,m;
	m_txtStudentName.GetWindowTextW(sname);
	m_txtStudentName.GetWindowTextW(id);
	m_txtClass.GetWindowTextW(sclass);

	sprintf(s1.sname,"%S",sname);
	sprintf(s1.id,"%S",id);
	sprintf(s1.sclass,"%S",sclass);

        m_lstStudent.add(s1);
	}
}

2 Ответов

Рейтинг:
4

Jochen Arndt

Вы должны добавить соответствующие столбцы в свой элемент управления списком, который должен находиться в режиме отчета (LVS_REPORT стиль, обычно определяемый в файле ресурсов). Сделайте это в функции инициализации родительского окна (например, OnInitDialog с помощью диалоговых окон):

m_lstStudent.InsertColumn(0, _T("Name"));
m_lstStudent.InsertColumn(1, _T("ID"));
m_lstStudent.InsertColumn(2, _T("Class"));

Затем установите данные столбца после добавления нового элемента:
// Insert new item and set text for first column
int pos = m_lstStudent.InsertItem(0, sname);
// Set text for other columns
m_lstStudent.SetItemText(pos, 1, id);
m_lstStudent.SetItemText(pos, 2, sclass);


Premnath Mali

Спасибо, это работает нормально, но проверьте один раз SetItemData (), если мы можем использовать его для того же самого, а затем прокомментируйте меня снова...!

Jochen Arndt

SetItemData () устанавливает пользовательские данные для элемента (значение DWORD). В приложениях баз данных он может использоваться для хранения числового идентификатора.

Вероятно, вы захотите использовать другие функции Set, такие как SetItem(). Их можно использовать не по курсу. Но тогда вы должны создать и инициализировать структуру LVITEM.

Premnath Mali

Как нам это сделать? У вас есть какой-нибудь фрагмент этого?
Я имею в виду, что вы уже помогли мне сделать мои вещи, но что, если эта студенческая структура имеет более 20 переменных в то время, устанавливая каждый элемент вручную, это не очень хороший способ, не так ли?

Jochen Arndt

Фрагмент, не зная, как организованы ваши дара, на самом деле не поможет.

Для каждого поля вашей структуры в списке будет столбец. И вы должны установить каждый столбец (подпункт). Единственное, что нужно сделать при установке многих подколонок или добавлении нескольких элементов, - это отключить перерисовку при обновлении списка.

Рейтинг:
12

Richard MacCutchan

Ты наверное имеешь в виду Класс CListView[^], хотя вам придется добавлять элементы вручную из структуры для каждого столбца. Или вы можете переключиться на C#, который обеспечивает привязку данных.


Premnath Mali

Это было хорошее предложение, но я хотел придерживаться c++