This blog has moved to http://ikhwanhayat.net

Friday, February 18, 2005

Petualangan .NET: Bind DataGrid ke ArrayList

Biasanya kita bind control seperti DataGrid atau DataList kepada ADO.NET objects seperti DataTable, tapi sebenarnya kalau nak bind ke object jenis Collection pun boleh juga. Contohnya kita ada an array of objects, kita boleh masukkan dia dalam ArrayList utk bind kepada DataGrid. Mari adik2, kita lihat contohnya...

// ***** Dalam code-behind ***************

//define object User class User { public int ID; public string Name;
public void User(int pID, string pName) { this.ID = pID; this.Name = pName; } } . . . //temporary variable utk hold User User tmp;
//ArrayList yg akan pegang tatasusunan users ni ArrayList arr = new ArrayList();
//create objects dan add dlm ArrayList tmp = new User(1, "Mus"); arr.Add(tmp);
tmp = new User(2, "Fauzan"); arr.Add(tmp);
tmp = new User(1, "Wan"); arr.Add(tmp);
//DataGrid drag-drop dari toolbox //sekarang kita jadikan ArrayList tadi sebagai DataSourcenya //dan bindkan dia dg.DataSource = arr; dg.DataBind();
// ***** Dalam ASPX *************** <asp:datagrid id="dg" runat="server" AutoGenerateColumns="False"> <Columns> <asp:TemplateColumn HeaderText="User ID"> <ItemTemplate> <%# Container.DataItem.ID %> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="User Name"> <ItemTemplate> <%# Container.DataItem.Name %> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:datagrid>
kalau nak gunakan BoundColumn (bukan TemplateColumn yg leceh spt di atas), kena buat Property utk member variables dlm class User tadi.
// ***** dalam class User **********
//tukarkan Name jadi property utk access private variable _name
private string _name;
public string Name
{
    get { return _name; }
    set { _name = value; }
}

//***** dalam ASPX ********** //gantikan <asp:TemplateColumn> tadi <asp:BoundColumn HeaderText="User Name" DataField="Name"></asp:BoundColumn>
Dia tak nak bind kalau guna variable biasa. Terkena aku dengan benda ni tadi, menggagau aku mengumbang (debugging). Keluar error ni: A field or property with the name 'Name' was not found on the selected datasource. "Kenapa kata variable tak wujud ni?! Kan terang jelas izhar haqiqi ada Name dlm User ni", getus hati kecilku. Tensen aku sekejap. Rupa2nya dia nak "property", bukan "variable" biasa". Sekarang dah ok... Amaran: Kod di atas ialah lakonan semula. Kod asal jauh lebih kompleks lagi. Warning: Kod di atas tidak diuji, main tulis je. Achtung: Dah la ada "amaran", ada "warning" lagi..

6 Comments:

At 2/21/2005 11:49:00 am, Anonymous Anonymous said...

"mengumbang..."?? hahaha

 
At 2/21/2005 11:51:00 am, Blogger Ikhwan Hayat said...

heheh.. patutnya "debugging" jadi "menyahkumbang"..
"mengumbang" translate jadi "bugging"..
aku dah tersilap, malunya aku.. :P

 
At 2/21/2005 11:58:00 am, Anonymous Anonymous said...

Menyahpepijat....;)..hiii, tak tahan aku gelak..

 
At 2/21/2005 12:00:00 pm, Blogger Ikhwan Hayat said...

alah panjang sangat lah..
"kumbang" lagi syok.. :D

 
At 2/21/2005 01:43:00 pm, Anonymous Anonymous said...

yelah..mari adik2 mengumbang versi 1kHz ;)

 
At 3/04/2005 06:25:00 pm, Blogger Ikhwan Hayat said...

Entry updated. Sorry, there's a stupid typo in the code.

 

Post a Comment

<< Home