2010年9月1日 星期三

ListItem的資料Add方式

有ListItem的Control都可以用DataBind的方式將資料繫結
ddl.DataSource = ds.Tables["T_Zip"];
ddl.DataTextField = "Zip_Name";
ddl.DataValueField = "Zip_Code";
ddl.DataBind();

上述的方式當然指的是一個相當簡單並且直覺的資料


倘若,現在DropDownList或是ListBox所要呈現的資料,是一個需要加工過的,顯示文字或是Value會經過處理,

而與原來取得的資料不同時,可能就不方便用上面的方式來做(也不是不能,只是比較不那麼有效率)

或是資料量相當大,如果是使用一般常見的方法
for(int i=0; i<tmpDataTable.Count; i++)
{
ListIem items = new ListItem();   
items.Text = tmpDataTable.Rows[i].["Column1"].ToString().Trim();   
items.Value = tmpDataTable.Rows[i].["Column2"].ToString().Trim();   
DropDownList1.Items.Add(items);
}

上面的方式就不是那麼有效率,可以試著改用下面的方法


使用 AddRange 方法,加入 items 參數指定的 ListItem 物件陣列中的項目。這可以讓您以一個步驟將多個 ListItem 物件加入集合中。

如果是使用ASP.NET 3.5的環境下,就可以用List<ListItem>,然後以AddRange方法來做
List<ListItem> ListZip = new List<ListItem>();
foreach (var item in q)
{
ListItem li = new ListItem(item.Zip_Name.Trim(), item.Zip_Code.Trim());
ListZip.Add(li);
}
ddl.Items.AddRange(ListZip.ToArray());

如果還是ASP.NET 2.0的環境,也可以用AddRange方法,並且搭配ListItem[]
ListItem[] ListItemArray = new ListItem[ds.Tables["T_Zip"].Count()];   
for (int i = 0; i < ds.Tables["T_Zip"].Count; i++)   
{   
ListItemArray[i] = new ListItem(   
ds.Tables["T_Zip"].Rows[i].["Zip_Name"].ToString().Trim(),   
ds.Tables["T_Zip"].Rows[i].["Zip_Code"].ToString().Trim()   
);   
}   
ddl.Items.AddRange(ListItemArray);

多多使用有效率的方式來處理。




1 則留言:

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。