【发布时间】:2014-06-17 08:42:39
【问题描述】:
我在 detailsview 中使用了一个下拉列表,它填充得很好,但是当我执行插入时,有一个回发,所以我试图再次绑定 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 中运行良好。还尝试将方法调用放在 !IsPostBack 之外以始终填充它,但这也不起作用。
我检查了 GetPaperFutures() 并且每次都运行良好,所以问题出在其他地方,但我找不到。
【问题讨论】:
-
清除数据源重新绑定!
-
尝试在 Page_Load 中使用 ddl.Items.Clear 但仍然不起作用
-
不是内页加载!同时绑定! ddl.DataSource = null; comboBox1.DataSource = paperFutureList;
-
尝试在 ddl.DataSource = paperFutureList 之前在 BindDropDownList 中清除它,但仍然无法正常工作。
-
确保页面和 DropDownList 的 EnableViewState 等于 true