因为数据库表中字段数的不确定,我需要使用DetailsView控件动态生成模板列,在模板列中使用DropDownList控件来显示可选择的值列表。现在DropDownList的列表值已经显示正确,但是保存的时候没办法保存到数据库中。因为模板列是动态生成的,所以不能像在设计视图中使用SelectValue='<%#Bind(字段)%>'的方式来进行绑定。

解决方案 »

  1.   

    使用生成HTML代码不就又回到ASP去了
      

  2.   

    下面是列模板的类,使用时可能正常显示出下拉列表,但是保存时只会保存一个空值,请高手帮我看看哪里还有问题
        public class DDLTemplete : IBindableTemplate
        {
            string columnName = "/";
            DataSet ds = null;
            public DDLTemplete(string colname,DataSet dsList)
            {
                columnName = colname;
                ds = dsList;
            }        public void InstantiateIn(Control container)
            {
                DropDownList ddl = new DropDownList();
                ddl.ID = "droplist";
                ddl.Items.Clear();
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    ddl.Items.Add(new ListItem(dr["itmName"].ToString()));
                }            
                ddl.DataBinding+=new EventHandler(this.OnDataBinding);
                container.Controls.Add(ddl);
            }        public IOrderedDictionary ExtractValues(Control container)
            {
                DropDownList ddl = (DropDownList)container.FindControl("droplist");
                OrderedDictionary dictionary = new OrderedDictionary();
                if (ddl != null)
                {
                    dictionary[columnName] = ddl.SelectedValue;
                }
                return dictionary;
            }       
            
            public void OnDataBinding(object sender, EventArgs e)
            {
                DropDownList ddl = (DropDownList)sender;            
                DetailsView dv = (DetailsView)ddl.NamingContainer;
                DataRowView drv = (DataRowView)dv.DataItem;
                if (drv != null)
                {
                    string value = drv[columnName].ToString();
                    ddl.SelectedIndex = ddl.Items.IndexOf(ddl.Items.FindByValue(value));
                }
            }
        }