2017-09-26 4 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

cmbFormatFFCがレンダリングされる前に、Ext.Netによって生成され、クライアントに送信されているJSが実行されています。後で起こることを確実にするために、リスナーをBeforeRenderからBoxReadyに変更することができます。

1

BeforeRenderを使用してストアデータを読み込むことはできません。制御ライフサイクルの初期に起こる。最善の解決策は、RowExpanderでBeforeExpandイベントを使用することです。また、ComboBoxに静的データがあるため、DirectEventを1回だけ実行したいとします。次に例を示します。

* .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(); 
} 
関連する問題