簡體   English   中英

C#組合框綁定和第一個空值

[英]c# combobox binding and first null value

我可能遇到了一個小問題,但找不到解決方法...

我在winform上有一個組合框,並且此組合框已綁定到數據表中的列。 此列(保留打印機名稱)為空值。 我希望組合框顯示第一個值字符串“ default”,然后顯示打印機列表。 但是我不希望將“默認”字符串存儲在數據表中,而只是將其設置為null。

cmbDefaultPrinter.DataSource = this.availablePrinters;
cmbDefaultPrinter.DisplayMember = "Display";
cmbDefaultPrinter.ValueMember = "Value";

cmbDefaultPrinter.DataBindings.Add(new Binding("Text", ctr.ds.Tables[t.toTable], "printer"));

其中availablePrinters是此類的列表:

class myPrinters
{
    public string Value { get; set; }
    public string Display { get; set; }

    public myPrinters(string value, string display)
    {
        this.Value = value;
        this.Display = display;
    }
}

在availablePrinters中的第一個元素是:myPrinter(null,“默認打印機”);

我究竟做錯了什么?

一些選項:

給定myPrinter對象的集合(例如List或綁定的DataTable),您可以簡單地將默認值作為集合的第一個元素插入。 然后,當您使用DataBind時,將丟棄所有當前元素,並使用空白元素重新加載新元素。

您還可以通過覆蓋OnDataBound來自定義數據綁定。 添加所有DataTable的元素后,進入並手動插入默認值。

您也可以放棄默認的DataBind行為,然后自己填充ComboBox。 在“延遲加載”組合框的情況下,我已經做過很多次了(在這里,我首先設置一個項,該值是記錄的當前值,然后當他們想將列表放下時,我去檢索值並完全填充名單)。 涉及更多一點; 您基本上需要使用Items.Add()滾動自己的數據綁定行為。 但是,這並不困難,它為您提供了更大的靈活性,包括添加不在DataSource中的項目的能力。

編輯:在這種情況下(當您需要NULL時將寫入一個空字符串),我將把以下內容放入擴展方法庫,然后在檢索它時在comboBox.SelectedValue()的末尾對其進行調用堅持您的域對象:

public static string NullIfEmpty(this string input)
{
    return String.IsNullOrEmpty(input) ? null : input;
}

基本上,Web控件在設置文本,值或其他顯示的數據屬性時會將null轉換為空字符串,因此它們可以簡化其內部工作。 但是,它們不會轉換回null,因此,如果要null而不是空字符串,則必須自己進行轉換。 如上述方法所示,這非常簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM