2012-07-12 21 views
0

我想知道返回一個webcontrol和傳遞之間的區別。我有一個在我的aspx代碼中的webcontrol。像傳遞vs返回(網絡)控件?

<asp:TableCell> 
<telerik:RadComboBox runat="server" ID="rcbName"></telerik:RadComboBox> 
</asp:TableCell> 

然後,我想以編程方式填充組合框(應該不管它是什麼樣的控制)。

所以我有這個函數返回一個組合框:

private RadComboBox rcb CreateRcbSearchResults(DataSet ds) 
{ 
    RadComboBox rcb = new RadComboBox(); 

    foreach (DataRow row in ds.Tables[0].Rows) 
     rcb.Items.Add(new RadComboBoxItem(row["description"].ToString(), row["id"].ToString())); 

    return rcb; 
} 

然後,我將設置組合框:

rcbName = CreateRcbSearchResults(ds); 

出於某種原因,這並不工作,它只是給我返回一個空的組合框(瀏覽器端),即使我在調試時看到它已被填充。

一位同事看了一下,改變了我的功能,通過組合框:

private void CreateRcbSearchResults(RadComboBox rcb, DataSet ds) 
{ 
    foreach (DataRow row in ds.Tables[0].Rows) 
     rcb.Items.Add(new RadComboBoxItem(row["description"].ToString(), row["id"].ToString())); 
} 

現在我做:

CreateRcbSearchResults(rcbName, ds); 

而現在它的工作原理。我想知道這是爲什麼。有人能告訴我嗎?

回答

1

當它是頁面的一部分時,有更多的屬性設置在組合框上,而不僅僅是你設置的東西。你正在做的是創建一個全新的組合框實例,它沒有ID和什麼,然後替換頁面加載生成的實例。

您更改了代碼以將引用傳遞給頁面創建的控件,然後您只是將項目添加到它。

+0

看起來很奇怪,調用構造函數不會像從aspx頁面調用時那樣做。最初我也設置了一個ID,但由於rcbName已經被設置爲ID,我不認爲這是必要的。 – Rubenisme 2012-07-12 15:18:30

+0

在控件上設置了頁面特定的值。嘗試調試並查看傳入的控件,然後將其與新的RadComboBox()進行比較並查看其差異。 – 2012-07-12 15:20:43