2013-08-06 26 views
0

我使用代碼後面的一些編程控件來填充一個ascx Panel控件,但我無法弄清楚爲什麼'SelectedValue'屬性沒有設置爲我所期望的。DropDownLists的SelectedValue設置不正確

我有這樣的代碼:

int i = 0; 
{ 
    var row = new Panel {ID = string.Format("row_{0}", i)}; 
    var ddl = new DropDownList(); 
    ddl.Items.AddRange(_templateDdl.Items.OfType<ListItem>().ToArray()); 
    ddl.SelectedValue = "21246"; 
    ddl.ID = string.Format("ddl_{0}", i); 

    row.Controls.Add(ddl); 
    Rows.Controls.Add(row); 
} 
i = 1; 
{ 
    var row = new Panel {ID = string.Format("row_{0}", i)}; 
    var ddl = new DropDownList(); 
    ddl.Items.AddRange(_templateDdl.Items.OfType<ListItem>().ToArray()); 
    ddl.SelectedValue = "21240"; 
    ddl.ID = string.Format("ddl_{0}", i); 

    row.Controls.Add(ddl); 
    Rows.Controls.Add(row); 
} 

的問題是,即使ID的設置是否正確,第一個的的SelectedValue始終是一樣的最後一個。

有沒有什麼辦法可以監控控件,並讓Visual Studio中斷以防其他代碼更改值?

其他任何建議,歡迎:)

也許應該提到這是一把umbraco解決方案正在做,如果它意味着什麼。

由於

+0

當您查看您的DDL它有它的默認值的屬性? – Brian

+0

DDL正在由代碼創建。當我在調試中逐步完成時,我可以驗證SelectedValue是否正確設置。它的行爲就好像別的東西正在改變ddl後一樣。 – henrik242

+0

看來即使SelectedValue屬性集屬於DDL,它實際上也設置在ListItem上,在這種情況下,它是從模板ddl複製的,因此也是對同一個數組的引用。 – henrik242

回答

1

似乎即使SelectedValue屬性組所屬的DDL,它實際上是在列表項,在這種情況下被從模板DDL複製設置,並因此到一個參考相同的陣列。

我寫了這個代碼的解決方案:

// Pass the template DDL to this function which will create a new separate List: 
private List<ListItem> GetListItems(DropDownList ddl) 
{ 
    return (from ListItem srcItem in ddl.Items select new ListItem(srcItem.Text, srcItem.Value)).ToList(); 
} 

// Retrieve the items from the List and assign them to the DropDownList: 
ddl1.Items.AddRange(GetListItems(_templateDdl).ToArray());