0

更新 sqldatasource 或更改 FormView 模式后,我无法填充下拉列表。下拉列表是从后面代码中的数组创建的。我将在下面发布代码片段。在这些事件之前,下拉列表会按预期绑定。

任何关于为什么这不起作用的帮助都会很棒。

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" DataSourceID="tbl_PreRegistration"
    Width="100%" CssClass="c2wForm" DefaultMode="Edit">
<EditItemTemplate>
    <asp:DropDownList ID="stateDDL" runat="server" OnSelectedIndexChanged="State_DDL_SelectedIndexChanged"
                                CausesValidation="false" AutoPostBack="true">
                            </asp:DropDownList>
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
            Text="Update" CssClass="button blue" />
        &nbsp;<asp:LinkButton ID="btnReset" runat="server" CausesValidation="False"
             Text="Cancel" CssClass="button white" OnClick="btnReset1_Click" />
             </ContentTemplate></asp:UpdatePanel>
    </EditItemTemplate>
</asp:FormView>

代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {      

        if (!IsPostBack)
        {
            populateStateDDL("stateDDL", "CA");
        }
    }

protected void populateStateDDL(string DDL_ID, string getCurrentValue)
    {
        DropDownList strDDL_ID = (DropDownList)FormView1.FindControl(DDL_ID);
        ArrayList states = new ArrayList();


        strDDL_ID.DataValueField = "Value";
        strDDL_ID.DataTextField = "Text";
        strDDL_ID.DataSource = formating.GetAllStates();
        strDDL_ID.DataBind();
        strDDL_ID.SelectedValue = getCurrentValue.ToUpper();
    }
4

1 回答 1

0

您需要每次都创建控件,而不仅仅是在 postback = false 时。控件应该在 Init 事件中呈现,以便它可以连接到视图状态和所有其他 webforms 的东西。

这是一些伪代码

private DropDownList ctrl;

protected override void Init(EventArgs e)
{
      base.Init(e);

      ctrl = new DropDownList
              {
                   Id = "name of control",
                   DataValueField = "Value", 
                   DataTextField = "Text"
              };

      Controls.Add(ctrl);
}

protected override void Load(EventArgs e)
{
      base.Load(e);

      if(ispostback) return;

      ctrl.DataSource = GetData();

      DataBind();
}
于 2012-11-16T20:19:48.917 回答