0

私は2つのリストボックスを持っています。

           <asp:ListBox ID="ListBox_Region" runat="server" 
              DataTextField="arregion" DataValueField="arregion" AutoPostBack="True" 
             Height="96px" 
             Width="147px" DataSourceid="sqldatasource1"></asp:ListBox>
            <asp:ListBox ID="ListBox_Area" runat="server"  
            DataTextField="ardescript" DataValueField="ardescript"     
             AutoPostBack="True"              
             OnSelectedIndexChanged="ListBox_Area_SelectedIndexChanged" 
             Height="96px" 
             Width="147px" >

したがって、 ListBox_Region から値を選択すると、対応する値が ListBox_Area で次のように更新されます。

        protected void ListBox_Region_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.ListBox_Area.Items.Clear();
        string selectedRegion = ListBox_Region.SelectedValue;
        var query = (from s in DBContext.areas
                     where s.arregion == selectedRegion
                     select s);
        ListBox_Area.DataSource = query;
        ListBox_Area.DataBind();


    }

ListBoxRegion_SelectedIndexChaged のイベントはページ Load に書き込まれます。

ただし、問題は最初のページの読み込み時にあり、ListBox_Region の最初の値はデフォルトで選択されている必要があります。2 番目のリストボックスは対応する値に更新する必要がありますが、これは選択したインデックスの変更が発生する前に行う必要があります。それで、これを行う方法を教えてください。

4

1 に答える 1

0

ロジックをListBox_Region_SelectedIndexChanged別のメソッドに移動しpage_load、postback が false のときから呼び出します。

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
          // Bind ListBox_Region and set the first value as selected
          ...
          //
          BindAreaList();
    }
}

protected void ListBox_Region_SelectedIndexChanged(object sender, EventArgs e)
{
    BindAreaList();
}

protected void BindAreaList()
{
    this.ListBox_Area.Items.Clear();
    string selectedRegion = ListBox_Region.SelectedValue;
    var query = (from s in DBContext.areas
                 where s.arregion == selectedRegion
                 select s);
    ListBox_Area.DataSource = query;
    ListBox_Area.DataBind();     
}
于 2012-06-27T01:06:05.977 に答える