2009-04-16 113 views
1

我已經達到設計決定如何在數據綁定組合框中指示'未選定'的時間。我希望將它應用於ComboBox需要的所有未來事件。在數據綁定組合中,不能將SelectedIndex設置爲-1,也不能將SelectedValue設置爲null。組合框中的虛擬物品

通常建議的解決方案是向組合添加虛擬行,但不知道綁定到行的對象時,組合不能可靠地創建虛擬對象,以便顯示'none selected'消息。我不想在數據源中添加其他項目,因爲這會損害不使用虛擬對象的其他客戶端的列表。

還有其他的選擇嗎?順便說一句,我正在使用Telerik RadComboBox,但是這種情況並不特定於Telerik控件。

回答

2

您可以定義在標記了「空項目」,並追加任何數據綁定項:

<asp:DropDownList DataSourceID="..." AppendDataBoundItems="true" ...> 
    <asp:ListItem Value="-1" Text="None"></asp:ListItem> 
</asp:DropDownList> 

,關鍵是要指定AppendDataBoundItems =「真」追加數據綁定項目到在標記中直接指定的任何項目。

這適用於標準的ASP.NET DropDownList,但也適用於Telerik RadComboBox。

+2

另外值得一提的是,如果你這樣做(我建議:))和你想成爲一個必填字段。您可以在RequiredFieldValidator上指定`InitialValue =「 - 1」`屬性 – 2009-04-16 21:38:51

1

在你綁定數據前添加一個新項目並設置AppendDataboundItems = true;

cbo.AppendDataboundItems = true; 
cbo.Items.add(new ListItem("None", "-1"); 
cbo.DataSource = x; 
cbo.DataBind(); 
0

希望我在ThickClient像AppendDataBoundItems沒有財產(窗口APP) 更好地插入空行中第零索引你的數據源表。

 DataRow dr = dtsource.NewRow(); 
     dr["username"] = "--New User---"; 
     dr["Userid"] = 0; 


     dtsource.Rows.InsertAt ((dr),0); 
     cmbToUser.DataSource = dtsource; 
0

IMO這是數據綁定在其表面平坦的地方。在非數據綁定控件上,這非常簡單 - 只需在手動添加其他項目之前將虛擬物品添加到組合框。

要可靠地對所有類型的數據綁定的組合框執行此操作,您需要將該項添加到數據集中 - 這違反了數據綁定應該爲您帶來的呈現和功能的分離。

數據綁定通常會爲您節省時間,直到某個點。當你開始黑客攻擊以克服數據綁定的缺點時,你不再節省時間。

我對此的建議通常是重新評估數據綁定是否是正確的解決方案。

/咆哮過