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 イベントでレンダリングする必要があります。これにより、viewstate や他のすべての Web フォームに関連付けることができます。

ここにいくつかの擬似コードがあります

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 に答える