2012-03-28 38 views
0

我有兩個組合框,第一個觸發器的UpdatePanel,更新第二個:控制在UpdatePanel中失去價值

 protected void cb1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     cb2.DataSource = DT1; 
     cb2.DataBind(); 


     } 

問題是,當我點擊按鈕,所有值都行,除了一個在UpdatePanel中,這樣的UpdatePanel莫名其妙重置子控件上的選定索引。

任何想法如何解決這一問題?

我知道會話,但我不知道在哪個步驟中將cb2的值分配給會話。

謝謝。

更新,ASPX

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" 
                 UpdateMode="Conditional"> 
    <dx:ASPxComboBox ID="cb2" runat="server" Height="22px" ValueField="ID" 
                   ValueType="System.Int32" Width="170px"> 
                   <Columns> 
                    <dx:ListBoxColumn Caption="ID" FieldName="ID" Visible="False" /> 
                    <dx:ListBoxColumn Caption="City" FieldName="City" /> 
                   </Columns> 
                  </dx:ASPxComboBox> 
</ContentTemplate> 
                <Triggers> 
                 <asp:AsyncPostBackTrigger 
    ControlID="cb1" EventName="SelectedIndexChanged" /> 
                 </Triggers> 
                </asp:UpdatePanel> 
+0

你可以發佈你的aspx的一些代碼嗎?我已經根據您的給定方案設置的示例運行良好 - cb2在回發時具有選定的值。 – 2012-03-28 19:36:55

+0

@GuthMD這裏是aspx。謝謝。 – 2012-03-28 20:00:28

回答

2

幾件事情在這裏:你有ChildrenAsTriggers="False",但你們又爲子控件的異步回發trigeer: 'CB2'。我想你應該刪除ChildrenAsTriggers="False"屬性(「true」是默認值),你可能是指有ansync回發trigeer設置爲'CB1' 控制象下面這樣:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <dx:ASPxComboBox ID="cb2" runat="server" Height="22px" ValueField="ID"  
         ValueType="System.Int32" Width="170px"> 
     <Columns> 
      <dx:ListBoxColumn Caption="ID" FieldName="ID" Visible="False" /> 
      <dx:ListBoxColumn Caption="City" FieldName="City" /> 
     </Columns>                
    </dx:ASPxComboBox> 
    </ContentTemplate>              
    <Triggers>               
    <asp:AsyncPostBackTrigger ControlID="cb1" EventName="SelectedIndexChanged" /> 
    </Triggers>              
    </asp:UpdatePanel> 

此外我認爲你原來的複製的代碼缺少開頭<ContentTemplate>標記。

此時,您的cb1控件的事件`cb1_SelectedIndexChanged'應該觸發並且能夠在上面的UpdatePanel中更新cb2控件的數據源。

+0

你說得對,cb1是觸發器,當我嘗試在S.O.上嘗試格式化代碼時,我錯過了它和內容模板。 我也試過ChildrenAsTriggers =「True」,但總是選擇的索引是-1(這是未選中的)。 cb1確實觸發更新面板併成功綁定cb2(我看到我有10個項目,當我設置中斷點)但選定的索引仍然是問題。 – 2012-03-28 20:17:39

+1

我不確定你的第三方dx:ASPxComboBox,但是在natuarally綁定列表中的第一項是顯示的。你是說cb1控制失去了它的選定值?如果是,請確保更新面板具有'UpdateMode =「Conditional」'並且不設置'ChildrenAsTriggers =「false」'。我的猜測是代碼中的值發生了變化,或者反彈到了數據源 - >這將**絕對**導致值不被保留並返回-1,或者包含控件的UpdatePanel配置不正確。 – atconway 2012-03-28 20:47:06

+0

在相同的表單上,我有幾個其他的aspxcombobox-es,它們都是外部面板,並且它們都工作得很好,並且都配置爲cb2。 cb1不會丟失選定的值,但cb2(內部面板 - 確實)。它不應該被反彈,因爲它只是綁定在cb1上。 IND。改變了事件,而不是點擊按鈕。 「代碼更改」是什麼意思?謝謝。 – 2012-03-28 20:52:16