方法: 每当改变顺序或者改变值后都将当前ListBox的所有Item,通过for()循环将值保存在Hidden标签中,这个Hidden标签只能是html控件(记住:不能使用服务器控件TextBox, 因为把visible设置为false后,页面上就不会有这个元素了,而javascript也会因为没有对应的元素而出错),最后回送到服务器时通过一个分解函数分解出正确的顺序和值 。 具体: 脚本 <script language="javascript"> <!-- function RememberNow() { //记录当前的选择项,将当前列表中的值及顺序保存在Hidden中 //lstResult是服务器控件ListBox //txtSelectedItems是<input type=hidden> var count; var str=""; count=Form1.lstResult.options.length; for(var i=0;i<count;i++) { str+=Form1.lstResult.options[i].value + "," + Form1.lstResult.options[i].text + ";"; } Form1.txtSelectedItems.value=str;//例如:1,冷侠;2,轻轻飞舞; } //--> </script> 服务器端代码: private void Page_Load(object sender, System.EventArgs e) { try { //将修改后的顺序及值填充到目标ListBox //ParseIt函数用于分解出正确的值及顺序 lstResult.DataSource=ParseIt(txtSelectedItems.Value); lstResult.DataValueField="ID"; lstResult.DataTextField="Name"; lstResult.DataBind(); } catch(Exception ex) { Response.Write(ex.Message); } } private ICollection ParseIt(string str) { DataTable dtl=new DataTable(); dtl.Columns.Add(new DataColumn("ID")); dtl.Columns.Add(new DataColumn("Name")); int i=0; int j; while((j=str.IndexOf(";",i))>=0) { string tmp; tmp=str.Substring(i,j-i); string parseNumber,parseName=""; parseNumber=tmp.Substring(0,tmp.IndexOf(",")); parseName=tmp.Substring(tmp.IndexOf(",")+1,tmp.Length-tmp.IndexOf(",")-1); try { DataRow dr=dtl.NewRow(); dr["ID"]=Convert.ToInt32(parseNumber); dr["Name"]=parseName; dtl.Rows.Add(dr); } catch {} i=j+1; } dtl.AcceptChanges(); return dtl.DefaultView; }

|