c#ext.net:从后面的代码插入项目在组合框
问题描述:
我想要创建一个组合框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
答
确保您的组合初始化成功,并且您的方法fillComboDates()返回值
答
它可能是由Ext.Net生成并发送给客户端的JS在cmbFormatFFC
呈现之前执行。为了确保它稍后发生,您可以将侦听器从BeforeRender
更改为BoxReady
。
答
您不能使用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();
}
为什么要返回值? – aggicd