2017-09-26 48 views
0

我想要創建一個組合框2項目。這些項目的文本應以不同的格式顯示DateTime.Now。組合框在行擴展器中。這是組合的代碼:c#ext.net:從後面的代碼插入項目在組合框

<ext:ComboBox runat="server" ID="cmbFormatFFC" DataIndex="DateFormat"   FieldLabel="Date Format"    Width="400" ForceSelection="true" EmptyText="Select date format..."> 
     <Listeners> 
      <BeforeRender Handler="#{DirectMethods}.fillComboDates()" /> 

,並在代碼隱藏:

[DirectMethod] 
     public void fillComboDates() 
     { 
      cmbFormatFFC.Items.Insert(0,new Ext.Net.ListItem(DateTime.Now.ToString("d/M/yyyy"), "d/M/yyyy")); 
      cmbFormatFFC.Items.Insert(1,new Ext.Net.ListItem(DateTime.Now.ToString("dd-MMM-yyyy"), "dd-MMM-yyyy")); 
     } 

但是,當我在應用展開該行我得到這個錯誤:

Uncaught TypeError: Cannot set property 'component' of null

回答

0

確保您的組合初始化成功,並且您的方法fillComboDates()返回值

+0

爲什麼要返回值? – aggicd

0

它可能是由Ext.Net生成併發送給客戶端的JS在cmbFormatFFC呈現之前執行。爲了確保它稍後發生,您可以將偵聽器從BeforeRender更改爲BoxReady

1

您不能使用BeforeRender加載存儲數據。它發生在控制生命週期的早期。您最佳的解決方案是在RowExpander上使用BeforeExpand事件。另外,由於在ComboBox中有靜態數據,因此只需執行一次DirectEvent。這裏有一個例子:

*的.aspx

<ext:GridPanel ID="grid" runat="server"> 
    <ColumnModel> 
     <Columns> 
      <ext:Column runat="server" DataIndex="Field1" /> 
     </Columns> 
    </ColumnModel> 
    <Store> 
     <ext:Store runat="server" ID="store"> 
      <Model> 
       <ext:Model runat="server"> 
        <Fields> 
         <ext:ModelField Name="Field1" /> 
        </Fields> 
       </ext:Model> 
      </Model> 
     </ext:Store> 
    </Store> 
    <Plugins> 
     <ext:RowExpander runat="server"> 
      <Component> 
       <ext:ComboBox runat="server" ValueField="Key" DisplayField="Display"> 
        <Store> 
         <ext:Store runat="server" ID="comboStore" OnReadData="Store_ReadData"> 
          <Model> 
           <ext:Model runat="server"> 
            <Fields> 
             <ext:ModelField Name="Key" /> 
             <ext:ModelField Name="Display" /> 
            </Fields> 
           </ext:Model> 
          </Model> 
         </ext:Store> 
        </Store> 
       </ext:ComboBox> 
      </Component> 
      <Listeners> 
       <BeforeExpand Handler="if (comboStore.getCount() == 0) comboStore.reload();" /> 
      </Listeners> 
     </ext:RowExpander> 
    </Plugins> 
</ext:GridPanel> 

* .aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack || X.IsAjaxRequest) 
     return; 

    store.DataSource = new object[] 
    { 
     new { Field1 = "Row 1" }, 
     new { Field1 = "Row 2" }, 
     new { Field1 = "Row 3" } 
    }; 

    store.DataBind(); 
} 

protected void Store_ReadData(object sender, StoreReadDataEventArgs e) 
{ 
    comboStore.DataSource = new object[] 
    { 
     new { Key = DateTime.Now.ToString("d/M/yyyy"), Display = "d/M/yyyy" }, 
     new { Key = DateTime.Now.ToString("dd-MMM-yyyy"), Display = "dd-MMM-yyyy" } 
    }; 

    comboStore.DataBind(); 
} 
相關問題