CListCtrl wird erst nach 2 ComboBox Clicks aktualisiert

Indian

Erfahrenes Mitglied
Hi

Entwicklungsumgebung: MFC, WinXP Pro, Visual Studion NET

also ich hab eine List welche in der CListCtrl komplett angezeigt wird. Diese Liste besteht aus 2 verschieden Kategorie z.B. "Lebensmittel" und "Kosmetik".

So ich möchte wenn ich einen Eintrag in einer selektierbaren ComboBox "Lebensmittel" selektiere, alle Items in der CListCtrl gelöscht werden und nur die Items von der Kategorie "Lebensmittel" wieder eingefügt und angezeigt werden.

Beschreibung was passiert:
Die Artikel werden gelöscht aber die Items werden bein ersten mal nicht angezeigt und CListCtrl ist leer. Selektiere ich beim 2.ten Mal "Kosmetik" dann werden die "Lebensmittel" angezeigt. Selektiere ich dann "Lebensmittel" dann werden die "Kosmetik" Items angezeigt.

Das Problem
Nur bei der ersten selektion wird beim ersten mal alles gelöscht wird. Im groben und ganzen heisst es das jedesmal wenn ich in der ComboBox einen Eintrag auswähle wird immer die getätigte letzte Auswahl in der CListCtrl aufgelistet bzw. angezeigt wird. Erst wenn ich 2mal "Lebensmittel" selektiere ich erst beim 2ten mal die Liste der "Lebensmittel" angezeigt bekomme. Immer erst beim zweiten versuch.

Sozusagen ein Refresh problem. Gibts da irgendwas was ich noch aufrufen muss ? Habe die Anweisung in der Handler Funktion von der ComboBox geschrieben welche OnCbnSelchangeCombo1() heisst. Sie wird jedesmal aufgerufen wenn in der ComboBox ein Eintrag geändert bzw. aufgerufen wird.

Helft mir :(

Indian
 
Hm, ich würde sagen, dass du da einfach irgendwo ein Problem im Ablauf deiner Logik hast und das dein Refreshproblem da seine Ursache hat. Ich kann dir da nicht weiterhelfen, ohne das Projekt und die Abläufe zu kennen.
Setzt du irgendwo die Selektionen von Liste oder Combo vom Code aus?
 
nein ich selektiere im Steuerelement von einer ComboBox welcher bei jeder Veränderung eine Funktion ausführt. Das komische ist ja das alle Items in der CListCtrl gelöscht werden aber nicht nach dem löschen wieder eingfügt werden sondern erst bei erneuter selektion die vorherige eingefügten Items angezeigt werden. Im Prinzip ist das nicht schwer jedoch ... kommt mir wie ein Bug vor.

Der Code der Funktion sieht so aus:

Code:
Code:
void CListAllDlg::OnCbnSelchangeCombo1()
{
	CDatabase db;
	CDBVariant value;
	char sql_statement [2048] = "";
	CString m_ArticelNr="",m_ListCategory="";

	CProducts m_pData(&db);
	strcpy(sql_statement,_T("SELECT * FROM products ORDER BY articel")); 
	m_pData.Open(CRecordset::forwardOnly,sql_statement);

	GetDlgItemText(IDC_LISTCATEGORY,m_ListCategory);

	m_list_all.DeleteAllItems(); //delete all items first
	
	while(!m_pData.IsEOF())		 //show selected items
	{
		if (strcmp(m_ListCategory,m_pData.m_category) == 0)
		{
			m_ArticelNr="?Later?";
			m_list_all.AddItem(m_ArticelNr,m_pData.m_articel,m_pData.m_content,m_pData.m_price,m_pData.m_stock);
		}//end if

		m_pData.MoveNext();	
	}//end while
	db.Close();
}

Ich glaube nicht das hier was falsch. Bei jede Veränderung vom Steuerelement (ComboBox) wird diese Funktion ausgeführt. Nach meiner Meinung müsste ja alles auf einmal ausgeführt und angezeigt werden und nicht erst beim 2maligen auswählen der selektion in der ComboBox. CListCtrl wird ja refresht wenn alle Items in der CListCtrl (siehe oben in der Funktion kurz vor der while schleife) gelöscht werden, jedoch warum wird die CListCtrl nicht refresht nachdem alle Items eingefügt wurden ?
 
Zuletzt bearbeitet:
hab es sogar mit

MyListView.RedrawItems( int nFirst, int nLast );

versucht. Hat nicht geholfen. Ich versteh das nicht
 

Neue Beiträge

Zurück