Type | Description |
This method prevents the control from painting until the EndUpdate method is called. The BeginUpdate and EndUpdate methods increases the speed of loading your items, by preventing painting the control when it suffers any change. Once that BeginUpdate method was called, you have to make sure that EndUpdate method will be called too.
The following VB sample prevents painting the control while the control loads data from a recordset:
Set rs = CreateObject("ADODB.Recordset") rs.Open "Orders", "Provider=Microsoft.Jet.OLEDB.3.51;Data Source= D:\Program Files\Microsoft Visual Studio\VB98\NWIND.MDB", 3 ' Opens the table using static mode With List1 .BeginUpdate For Each f In rs.Fields .Columns.Add f.Name Next .PutItems rs.GetRows() .EndUpdate End With
The following C++ sample prevents refreshing the control while adding columns and items from an ADODB recordset:
#include "Items.h" #include "Columns.h" #include "Column.h" #pragma warning( disable : 4146 ) #import <msado15.dll> rename ( "EOF", "adoEOF" ) using namespace ADODB; _RecordsetPtr spRecordset; if ( SUCCEEDED( spRecordset.CreateInstance( "ADODB.Recordset") ) ) { // Builds the connection string. CString strTableName = "Employees", strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="; CString strPath = "D:\\Program Files\\Microsoft Visual Studio\\VB98\\NWIND.MDB"; strConnection += strPath; try { // Loads the table if ( SUCCEEDED( spRecordset->Open(_variant_t( (LPCTSTR)strTableName ), _variant_t((LPCTSTR)strConnection), adOpenStatic, adLockPessimistic, NULL ) ) ) { m_list.BeginUpdate(); m_list.SetColumnAutoResize( FALSE ); CColumns columns = m_list.GetColumns(); long nCount = spRecordset->Fields->Count; if ( nCount > 0 ) { // Adds the columns for ( long i = 0 ; i < nCount; i++ ) columns.Add( spRecordset->Fields->Item[ i ]->Name ); m_list.PutItems( &spRecordset->GetRows(-1), vtMissing ); } m_list.EndUpdate(); } } catch ( _com_error& e ) { AfxMessageBox( e.Description() ); } }
The sample adds a column for each field in the recordset, and add a new items for each record. You can use the DataSource property to bind a recordset to the control. The #import statement imports definitions for ADODB type library, that's used to fill the control.
The following VB.NET sample prevents refreshing the control while adding columns and items:
With AxList1 .BeginUpdate() With .Columns .Add("Column 1") .Add("Column 2") End With With .Items Dim iNewItem As Integer iNewItem = .Add("Item 1") .Caption(iNewItem, 1) = "SubItem 1" iNewItem = .Add("Item 2") .Caption(iNewItem, 1) = "SubItem 2" End With .EndUpdate() End With
The following C# sample prevents refreshing the control while adding columns and items:
axList1.BeginUpdate(); EXLISTLib.Columns columns = axList1.Columns; columns.Add("Column 1"); columns.Add("Column 2"); EXLISTLib.Items items = axList1.Items; int iNewItem = items.Add("Item 1"); items.set_Caption(iNewItem, 1, "SubItem 1"); iNewItem = items.Add("Item 2"); items.set_Caption(iNewItem, 1, "SubItem 2"); axList1.EndUpdate();
The following VFP sample prevents refreshing the control while adding new columns and items:
thisform.List1.BeginUpdate() with thisform.List1.Columns .Add("Column 1") .Add("Column 2") endwith with thisform.List1.Items local i i = .Add("Item 1") .Caption(i, 1) = "SubItem 1" i = .Add("Item 2") .Caption(i, 1) = "SubItem 2" endwith thisform.List1.EndUpdate()