DetailsView中DropDownList的绑定方式

来源:互联网 发布:western条带分析软件 编辑:程序博客网 时间:2024/04/29 21:40

在通常遇到的dropdownlist绑定一般是同数据库进行交互的。这次在DetailsView中绑定数据应用了其中的onDataBind和onPreRender事件。一般detailsview总数据绑定是放在onDateBind中的。onPreRender()是呈现页面之前最后的修改机会。

其中遇到了几个难点:

1。如何绑定数据

      绑定数据时在detailsView中PreRender中实现的,具体代码如下

 protected void DetailsView1_PreRender(object sender, EventArgs e) //绑定下拉列表 { if (this.IsPostBack) { if (DetailsView1.CurrentMode == DetailsViewMode.Edit) { String connString = ConfigurationManager.ConnectionStrings["ZtbConnectionString"].ConnectionString.ToString(); SqlConnection conn = new SqlConnection(connString); conn.Open(); try { DropDownList drp_spe = DetailsView1.FindControl("speciality") as DropDownList; //获取dropdownlist HiddenField hdf = DetailsView1.FindControl("HDF_speciality") as HiddenField; //获取hiddenfield string mysql = "select * from TRADE"; SqlDataAdapter da = new SqlDataAdapter(mysql, conn); DataSet ds = new DataSet(); da.Fill(ds, "TRADE"); drp_spe.DataSource = ds.Tables[0].DefaultView; drp_spe.DataValueField = ds.Tables["TRADE"].Columns[1].ColumnName; drp_spe.DataTextField = ds.Tables["TRADE"].Columns[1].ColumnName; drp_spe.SelectedValue = hdf.Value; drp_spe.DataBind(); ds.Dispose(); } catch(Exception ex) { Response.Write("alert('" + ex.Message.ToString() + "')"); } finally { conn.Close(); } } } }

其中应用了使用findcontrol获取处在编辑状态的detailsview中控件。绑定即可。

2。如何使数据库中的值限制为绑定值

      因为是修改相应的数据,我采用了detailsview控件,但在绑定时因为是重新绑定,故而数据并非是数据库中的值。这里用到了hiddenfield保存数据,然后赋给dropdownlist即可。

 <asp:TemplateField HeaderText="项目类型" SortExpression="BID_SPECIALITY"> <EditItemTemplate> <asp:DropDownList ID="speciality" runat="server" AutoPostBack="false" ></< span>asp:DropDownList> <asp:HiddenField ID="HDF_speciality" runat="server" Value='<%# eval="">' /> </< span>EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# eval="">' ></< span>asp:Label> </< span>ItemTemplate> <ControlStyle Width="20%" /> </< span>asp:TemplateField>

后台代码为:HiddenField hdf = DetailsView1.FindControl("HDF_speciality") as HiddenField; //获取hiddenfield   drp_spe.SelectedValue = hdf.Value;

3。选择下拉列表后值被重新绑定。

     现在考虑是因为绑定在PreRender中,导致了双向绑定。解决方法很简单,将ViewState改为False即可。

4。上传修改后的值

      在结局了这些问题之后,还是存在在编辑模式中,点击修改后没有修改成功,相应的字段在数据库中为空。应该是没有获取到相应的值。解决方法如下:

 protected void DetailsView_OnItemUpdating(object sender, DetailsViewUpdateEventArgs e) { DropDownList d1 = (DropDownList)DetailsView1.FindControl("speciality"); this.SqlDataSource2.UpdateParameters.Add("BID_SPECIALITY",d1.SelectedValue); }
原创粉丝点击