2012-11-20 23 views
1

为什么我的ComboBox中的项目数总是0,尽管此组合框的数据源有数据!为什么我的组合框计数是0?


<div align="right" dir="rtl"> 
     <asp:Label ID="lbl_contactListName" runat="server" Text="Menu Name :" CssClass="span"></asp:Label> 
     <telerik:RadComboBox ID="ddl_contactList" runat="server" AutoPostBack="True" CausesValidation="False" 
      CollapseDelay="0" Culture="ar-EG" ExpandDelay="0" Filter="StartsWith" ItemsPerRequest="10" 
      MarkFirstMatch="true" Skin="Outlook" EnableAutomaticLoadOnDemand="True" EmptyMessage="-New Menu-" 
      ShowMoreResultsBox="True" OnSelectedIndexChanged="ddl_contactList_SelectedIndexChanged" 
      EnableVirtualScrolling="True" DataTextField="list_desc" DataValueField="list_code" 
      DataSourceID="ObjectDataSource1" EnableViewState="true" Width="300px"> 
     </telerik:RadComboBox> 
    </div> 
     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetContactListsByDep" 
      TypeName="SendSMS_EmailModule.ContactList"> 
      <SelectParameters> 
       <asp:SessionParameter Name="year" SessionField="year" Type="Int32" /> 
       <asp:SessionParameter Name="main_code" SessionField="main_code" Type="Int32" /> 
      </SelectParameters> 
     </asp:ObjectDataSource> 
+0

你是如何得到计数的? –

+1

请确保你已经绑定组合框后计数 – cbillowes

+0

ddl_contactList.Items.Count() –

回答

2

也许你应该调用DataBind()调用计数之前()。

ddl_contactList.DataBind(); 
ddl_contactList.Items.Count(); 
+0

嗯我使用'DataSourceId'所以我为什么要再次绑定? –

+3

DataSourceId将在页面生命周期的'PreRender'事件中生效,并且'.Count()'调用发生在'Page_Load'之前,因此手动调用'.DataBind()'使其数据绑定早些时候,当你需要它时。或者,您可以尝试将'.Count()'移动到'PreRender'事件 – Thymine

+0

这是否适合您?如果没有,请让我知道。 –

2

您是否在页面加载时将计数设置为零。

如果是这种情况,那是因为页面加载事件在填充ComboBox之前命中。更简单的方法是在页面加载本身上填充项目。

(该代码是未测试的)

if(!Page.IsPostBack) 
{ 
using(var context = new Entities()) 
{ 
    foreach(var item in context.Employee) 
    { 
     RadComboBox1.Items.Add(new RadListBoxItem(item.Name, item.ID.ToString())); 
    } 
} 
} 
//Here you can get the count. 
3

“EnableAutomaticLoadOnDemand =真”在这里。属性负载需求的所有数据的拉德组合的属性值。所以当你点击你的组合框时,它会加载它中的数据直到它是空的。如果您不想按需制作组合,请将该属性设置为false。通过这样做,你将直接得到计数。

如果要将EnableAutomaticLoadOnDemand属性保留为True。您可以使用Rad Combo的ItemDataBound事件。通过使用它,您可以更改项目的文本和值属性,并根据数据项修改其属性集合。您可以在telerik rad combo找到更多详细信息。让我知道你是否想要更多细节。

相关问题