在回发后丢失detailsview下拉列表值

时间:2014-06-17 08:42:40

标签: c# asp.net

我在详细信息视图中使用了一个下拉列表并且填充得很好,但是当我执行插入时会有一个回发,所以我试图再次绑定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()并且它每次都运行良好,所以问题出在其他地方,但我无法找到。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。最终,我找到了解决方案!

只需在Page_PreRender事件中调用BindDropDownList()。

它成功运作!