前台:<asp:TemplateField HeaderText="所属部门">
  <ItemStyle HorizontalAlign="Left" />
  <EditItemTemplate>
    <asp:Label ID="lblDept" runat="server" Text='<%# Bind("Department_ID") %>'></asp:Label>
    <asp:DropDownList ID="ddlDept" runat="server" DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="ID" SelectedIndex='<%# Bind("ID") %>'>
    </asp:DropDownList>
  </EditItemTemplate>
  <ItemTemplate>
    <asp:Label ID="Label13" runat="server" Text='<%# Eval("Department_ID") %>'></asp:Label>
  </ItemTemplate>
</asp:TemplateField>detailsview绑定的是SqlDataSource1,表Employee,其中有一个字段是指向Department表的字段Department_ID
dropdownlist绑定的是SqlDataSource2,表Department,有字段ID、[Name]
后台:    protected void DetailsView1_DataBound(object sender, EventArgs e)
    {
        if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
        {
            Label lb = (Label)DetailsView1.FindControl("lblDept");
            string index = lb.Text;
            DropDownList dl = (DropDownList)DetailsView1.FindControl("ddlDept");
            dl.SelectedIndex = dl.Items.IndexOf(dl.Items.FindByValue(index));
        }
    }
显示正常,但就是编辑时,dropdownlist不能更新为我选择的值,请问这样写有什么错?我把DetailsView放在了Updatepanel中,会不会有什么影响

解决方案 »

  1.   

    编辑时再给它 DropDownList dl = (DropDownList)DetailsView1.FindControl("ddlDept");
                dl.SelectedIndex = dl.Items.IndexOf(dl.Items.FindByValue(index));
      

  2.   

    不是这问题SelectedIndex='<%# Bind("ID") %>'改为SelectedIndex='<%# Bind("Department_ID") %>'就好了明明数据源是SqlDataSource2,他却绑定到SqlDataSource1的字段,挺奇怪的。
      

  3.   

    dropdownlist绑定的SqlDataSource2是选择Department表:ID、Name...Employee表外键Department_ID指向Department表的ID你说这不是绑到另一个表去了