我使用了一个名为print_base()
函数来设置从结构数组所有元素在ListView的每个字段:显示ListView中数据WINAPI
void print_base(int number_of_students) {
int test_value = 3;
int exam_value= 4;
for (int i = 0; i < number_of_students; i++) {
for (int j = 0; j <= 8; j++) {
switch(j){
case 0:
char buffer_ID[50];
sprintf (buffer_ID, "%d ",student[i].ID);
ListView_InsertItem(grade_list, &lvi);
lvi.pszText = buffer_ID;
lvi.iItem = i;
lvi.iSubItem = 0;
break;
case 1:
ListView_SetItemText(grade_list, i, j, student[i].name);
break;
case 2:
ListView_SetItemText(grade_list, i, j,student[i].surname);
break;
case 3:
char buffer_mark1 [50];
sprintf (buffer_mark1 , "%d ",student[i].mark_1);
ListView_SetItemText(grade_list, i, j, buffer_mark1);
break;
case 4:
char buffer_mark2 [50];
sprintf (buffer_mark2 , "%d ",student[i].mark_2);
ListView_SetItemText(grade_list, i, j,buffer_mark2);
break;
case 5:
char buffer_mark3 [50];
sprintf (buffer_mark3 , "%d ",student[i].mark_3);
ListView_SetItemText(grade_list, i, j, buffer_mark3);
break;
case 6:
char buffer_mark4 [50];
sprintf (buffer_mark4 , "%d ",student[i].mark_4);
ListView_SetItemText(grade_list, i, j,buffer_mark4);
break;
case 7:
student[i].avarage=((((float)student[i].mark_1*test_value)+(student[i].mark_2*test_value)+(student[i].mark_3*test_value)+(student[i].mark_4*exam_value))/14);
char buffer_avarage[50];
sprintf (buffer_avarage, "%.2f ",student[i].avarage);
ListView_SetItemText(grade_list, i, j, buffer_avarage);
break;
}
}
}
}
我不知道为什么,但你可以看到在下面的图片中,只有最后一条记录几乎正确显示(没有ID)。是没有看到avarage因为ListView的扩展:
我觉得可能是一个问题ListView_InsertItem()
,但我不知道什么是错的究竟。
谁能告诉我为什么会发生这种情况,以及如何解决它?
此外,我想知道是否有任何可能性编辑和保存在ListView中完成的更改(双击并编辑一个字段或其他东西)。
在*调用'ListView_InsertItem'之前,您没有尝试初始化'lvi' *,但在*之后没有*!有时这有帮助。这是重点。 – RbMm
不是这种情况。我尝试了两种选择。 LVITEM lvi; lvi.mask = LVIF_TEXT; print_base(amount_of_students); – eredin