2014-07-11 52 views
7

我正在使用RadComboBox。在我的代碼設置選中的值給RadComboBox像這樣:如何使用數據源將RadComboBox設置爲AutomaticLoadOnDemand以編程方式

public void RCB_PO_NUM_DataBound(object sender, EventArgs e) 
     { 

      var itemRCB_PO_NUM = RCB_PO_NUM.FindItemByText(stringPO_NUM); 

      itemRCB_PO_NUM.Selected = true; 
      itemRCB_PO_NUM.Value = stringPO_NUM; 


     } 

我從我的數據庫中選擇號碼的列表,並在RadComboBox顯示它們。所以我必須使用DataBound事件來獲取數據。

這很好,直到我將AutomaticLoadOnDemand屬性設置爲true。一旦我這樣做,我就會得到我想要的AutomaticLoadOnDemand屬性所需的效果,然後失去將RadComboBox設置爲選定值的功能。

我需要能夠做到這兩個,AutomaticLoadOnDemand確實有助於加載RadComboBox中的項目加載非常快。代碼不必位於DataBound事件中。我真的不在乎它發生了什麼事,只要兩者都有效。有些人可以告訴我用什麼方法將AutomaticLoadOnDemand屬性設置爲true,或者我做錯了什麼?

+0

什麼是您的數據源?你如何將數據綁定到RadComboBox? – Win

+0

@Win我使用RadComboBox UI來選擇要顯示的表格和列。 – nate

+0

@note你用什麼方法將數據綁定到RadComboBox?例如,SqlDataSource,EntityDataSource,自定義綁定。 – Win

回答

1

嘗試OnClientLoad事件和控件的JavaScript API以選擇項目:http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html。將所需的文本存儲在隱藏字段或全局JS變量中。

問題是你沒有物品,直到請求回來,所以我不知道這是否會工作。因此,您可以嘗試使用OnClientItemsRequested http://www.telerik.com/help/aspnet-ajax/combobox-onclientitemsrequested.html事件的相同想法 - 查看具有所需文本的項目是否從服務器返回並選擇它。

+0

我會研究它。謝謝 – nate

+0

我真的不想用java來做我想做的事情。更重要的是在C#中做它 – nate

+0

1)它是JavaSCRIPT,而不是JAVA 2)按需加載的全部要點是不在服務器上加載這些項目,所以它們只能在客戶端上使用。 – rdmptn

2

當您使用LoadOnDemand時,您的組合框不會被綁定,直到用戶嘗試展開它。所以你不能使用DataBound事件。

我不確定你的用例是什麼。如果您只想向用戶顯示選定的項目,則可以在Page_Load事件中嘗試組合框的Text屬性。

protected void Page_Load(object sender, EventArgs e) 
{ 
    itemRCB_PO_NUM.Text = stringPO_NUM; 
} 

如果你真的需要選中的項目,那麼也許你可以添加單個項目的服務器端(抱歉,我現在不能測試)

protected void Page_Load(object sender, EventArgs e) 
{ 
    itemRCB_PO_NUM.Items.Add(new RadComboBoxItem() 
    { 
     Value = stringPO_NUM, 
     Text= stringPO_NUM, 
     Selected = true 
    }) 
} 

編輯: 我做了一些research,似乎該ItemDataBound事件應被正確觸發:

注意:當您使用DataSourceID或DataSource屬性在自動Load On Demand期間綁定RadComboBox時,ItemDataBound事件f IRES通常,這意味着你可以用它來改變項目的Text和Value屬性以及修改基礎上的DataItem的屬性收集等

所以,你可以嘗試使用它:

protected void RadComboBox1_ItemDataBound(object o, RadComboBoxItemEventArgs e) 
{ 
    DataRowView dataSourceRow = (DataRowView) e.Item.DataItem; 
    if(e.Item.Text == stringPO_NUM) 
    { 
     e.Item.Selected = true; 
     e.Item.Value = stringPO_NUM; 
    } 
} 

但是,我懷疑是在屏幕上,你在評論中提供我可以看到你的字符串stringPO_NUM具有空值。我認爲這可能是GetItemByText不向你返回項目的原因。

如果你想指定爲什麼你需要選擇這個項目,這將是有益的。

+0

我會試一試並回復你。感謝您的答覆。 – nate

+0

我無法綁定事件Page_Load上控件的數據,因爲我無法在該事件中設置控件的值或文本。當我嘗試運行您建議的代碼時,我收到來自調試器的空值。我發現,當我問這個問題之前:http://stackoverflow.com/questions/24702270/how-to-set-a-radcombobox-that-is-using-a-data-source-to-a-selected -value-in-code – nate

+0

你能指定哪個屬性有空值嗎? – Machet

1

正如其他人所說 - 啓用LoadOnDemand時,服務器上沒有組合框項目。 這就是爲什麼你不能使用FindItemBy *方法 - 它們總是會返回NULL。

提供更多關於你想要完成的事情的信息,然後我們可以提供幫助。

我想你想用你已有的文本預先填充組合框 - 爲此,你最好使用客戶端API,例如,在組合加載事件中,您可以調用requestItems(「your text」,true)方法傳遞您已有的文本,並且組合將發出ajax請求,以獲取通過作爲參數傳遞的文本過濾的項目。

+0

我正在使用RadComboBox從數據庫中選擇一個數字列表。正如我之前所說的,我不在乎使用什麼事件,以便我可以從RadComboBox中選擇值並在代碼隱藏的同時以編程方式使用AutomaticLoadOnDemand。 – nate

相關問題