روش بالا البته درسته و بدون اشکال هم کار میکنه و موردی هم نداره،
ولی همیشه مسائل اینقدر ساده نیست و گاهی پیش میاد که المان پیچیده تری داریم که نیاز به کنترل بیشتری داره (مثل table)
و در این حالت دیگه چسبوندن بخش های مختلف بصورت استرینگ به هم و ریختنش در innerhtml هم کدنویسی اولیه و هم نگهداریش سخت میشه.
2- کل دیتالیست رو سمت سرور میسازیم و بعد به صفحه اضافه میکنیم،
برای این کار یک placeholder روی صفحه میگذاریم که در code-behind به موقعیتی که باید المان ساخته شده رو اضافه کنیم دسترسی داشته باشیم:
<label for="input">City:</label>
<input list="datalist" id="input" placeholder="Type to search..." />
<asp:placeholder id="ph" runat="server"></asp:placeholder>
حالا کافی هست برای هر المان یک ابجکت از htmlgenericcontrol بسازیم و روی اون کار کنیم:
DIM dl AS NEW HTMLGENERICCONTROL("datalist")
dl.id= "datalist"
FOR EACH row AS DATAROW IN CitiesDT.rows
DIM opt AS NEW HTMLGENERICCONTROL("option")
opt.attributes.add("itemid" , row("cityid"))
opt.attributes.add("value" , row("city"))
dl.controls.add(opt)
NEXT
ph.controls.add(dl)