DetailsView中DropDownList的绑定方式

本文介绍了在ASP.NET中DetailsView控件中使用DropDownList进行数据绑定的方法,重点讨论了如何在onDataBind和onPreRender事件中进行操作。在遇到的难点中,包括了如何在PreRender阶段绑定数据、限制DropDownList值为数据库中的值、处理双向绑定问题以及如何在编辑模式下正确上传修改后的值。解决方案涉及使用HiddenField保存和恢复数据,调整ViewState以及确保正确获取和更新数据库字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在通常遇到的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); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值