how do you create a grid that have a pictue, some text and a checkbox. i manage to create the grid but there is no image on it. there are only 9 greybox. is it possible to create a gridbox without using resource? if yes can tell me how? below is a fragment of my code:

iGrid = new( ELeave ) CAknGrid;
iGrid->SetContainerWindowL( *this );

iGridM = new( ELeave ) CAknGridM;
iGrid->SetModel( iGridM );
iGrid->ConstructL( this, EAknListBoxMarkableGrid );

TBuf< KLengthOfEmptyText > emptyText;
iCoeEnv->ReadResource( emptyText, R_AKNEXGRID_TEXT_EMPTY_SELECTION_GRID );
iGrid->SetEmptyGridTextL( emptyText );

iGrid->SetRect( aRect );
iSizeOfItems.iWidth = ( aRect.iBr.iX - aRect.iTl.iX ) / KNumOfColumns;
iSizeOfItems.iHeight = ( aRect.iBr.iY - aRect.iTl.iY ) / KNumOfRows;

iGrid->SetLayoutL( ETrue, ETrue, ETrue, KNumOfRows, KNumOfColumns, iSizeOfItems );
iGrid->SetPrimaryScrollingType( CAknGridView::EScrollIncrementLineAndLoops );
iGrid->SetSecondaryScrollingType( CAknGridView::EScrollIncrementLineAndLoops );

iGrid->SetCurrentDataIndex( 0 );
DrawNow();

TBuf< 256 > pathAppMbm;
iCoeEnv->ReadResource( pathAppMbm, R_AKNEXGRID_PATH_AKNEXGRID_MBM );

CArrayPtr< CGulIcon >* icons = new(ELeave) CAknIconArray(10);
CleanupStack::PushL( icons );

CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL( pathAppMbm, 3 );
CleanupStack::PushL( bitmap );

CFbsBitmap* mask = iEikonEnv->CreateBitmapL( pathAppMbm, 4 );
CleanupStack::PushL( mask );
icons->AppendL( CGulIcon::NewL( bitmap, mask ) );

CleanupStack::Pop(); // mask
CleanupStack::Pop(); // bitmap

// mark (off)
CFbsBitmap* bitmap2 = iEikonEnv->CreateBitmapL( pathAppMbm, 1 );
CleanupStack::PushL( bitmap2 );
CFbsBitmap* mask2 = iEikonEnv->CreateBitmapL( pathAppMbm, 2 );
CleanupStack::PushL( mask2 );
icons->AppendL(CGulIcon::NewL( bitmap2, mask2 ));
CleanupStack::Pop(); // mask
CleanupStack::Pop(); // bitmap

// mark (on)
CFbsBitmap* bitmap3 = iEikonEnv->CreateBitmapL( pathAppMbm, 0 );
CleanupStack::PushL( bitmap3 );
CFbsBitmap* mask3 = iEikonEnv->CreateBitmapL( pathAppMbm, 2 );
CleanupStack::PushL( mask3 );
icons->AppendL(CGulIcon::NewL( bitmap3, mask3 ));
CleanupStack::Pop(); // mask
CleanupStack::Pop(); // bitmap

// Set icon array.
iGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
CleanupStack::Pop(); // icons array

// create data
MDesCArray* array = iGrid->Model()->ItemTextArray();
CDesCArray* cArray = ( CDesCArray* )array;

// Makes text which is added to.
TBuf< 40 > number;
TBuf< 40 > format;
iCoeEnv->ReadResource( format, R_AKNEXGRID_FORMATSTRING_MARKABLEITEM );

// The number of Grids.
TInt numberOfData = iGrid->GridModel()->NumberOfData() ;

// Add the data to the last
for ( TInt loop = numberOfData; loop < (KInitialNumOfItems + numberOfData) ; loop++ )
{
number.Format( format, loop + 1 );
cArray->AppendL( number );
}

// Inform list box that data added
iGrid->HandleItemAdditionL();

// activate the grid
iGrid->MakeVisible( ETrue );
iGrid->SetFocus( ETrue );

iGrid->SetExtent( TPoint(0,0), TSize(aRect.Width(),aRect.Height()) );
iGrid->ActivateL();
iGrid->DrawNow();


SetRect(aRect);
ActivateL();

//////////////////////////// RSS ////////////////////////////

RESOURCE TBUF40 r_aknexgrid_text_empty_selection_grid
{
buf = qtn_aknexgrid_text_empty_selection_grid;
}

RESOURCE TBUF40 r_aknexgrid_formatstring_markableitem
{
buf = qtn_aknexgrid_formatstring_markableitem;
}

RESOURCE TBUF256 r_aknexgrid_path_aknexgrid_mbm
{
buf = qtn_aknexgrid_path_aknexgrid_mbm;
}

//////////////////////////// LOC ////////////////////////////

#define qtn_aknexgrid_text_empty_selection_grid "empty"
//#define qtn_aknexgrid_formatstring_markableitem "0\t1\t%d Item"
#define qtn_aknexgrid_path_aknexgrid_mbm "\\system\\apps\\davidgrid\\davidgrid.mbm"