我在详细信息视图中使用了一个下拉列表并且填充得很好,但是当我执行插入时会有一个回发,所以我试图再次绑定DDL,但是值会以某种方式丢失。
我的aspx:
<asp:UpdatePanel ID="InsertPanel" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
<asp:Table ID="Table1" runat="server" CellSpacing="0" CellPadding="0">
<asp:TableHeaderRow SkinID="tableheaderrowSkin">
</asp:TableHeaderRow>
<asp:TableRow>
<asp:TableCell BackColor="DarkGray" BorderColor="DarkGray" BorderWidth="1" Width="300">
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="nFuturesId"
DataSourceID="FutureCommodityODS" DefaultMode="Insert" OnItemInserting="DetailsView1_ItemInserting"
SkinID="detailsviewSkin" OnItemInserted="DetailsView1_ItemInserted" EnableModelValidation="True">
<BrummerComp:SortableDropDownList ID="DropDownListFuturesInsert" runat="server" SkinID="BCdropdownlistSkin">
</BrummerComp:SortableDropDownList>
</asp:DetailsView>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</ContentTemplate>
</asp:UpdatePanel>
我在Page_Load中填充DDL:
protected new void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
BindDropDownList();
}
//DetailsView1.DataBind();
}
BindDropDownList:
private void BindDropDownList()
{
var paperFutureList = (List<PaperFutures>)DataManager.GetPaperFutures();
var ddl = (DropDownList)DetailsView1.FindControl("DropDownListFuturesInsert");
ddl.DataSource = paperFutureList;
ddl.DataValueField = "nFuturesID";
ddl.DataTextField = "ShortNameAndFutureNameAndFutureId";
ddl.DataBind();
}
问题是当我在我的详细信息视图中插入时,DDL会丢失它的值。我已经尝试了数据视图的数据绑定,但是这些值根本不会加载。
方法BindDropDownList第一次在Page_Load中运行良好。还尝试将methodcall放在外面!IsPostBack总是填充它但是它也不起作用。
我已经检查了GetPaperFutures()并且它每次都运行良好,所以问题出在其他地方,但我无法找到。
答案 0 :(得分:0)
我遇到了类似的问题。最终,我找到了解决方案!
只需在Page_PreRender事件中调用BindDropDownList()。
它成功运作!