簡體   English   中英

如何設置默認組合框

[英]How to Set default combobox

所以我一直在尋找為我的組合框設置一個默認值。 我發現了一些東西但它們似乎都沒有用。

實際上,它是有效的,如果我創建一個簡單的組合框並使用comboBox1.SelectedIndex = comboBox1.Items.IndexOf("something")但一旦我動態生成組合框的內容,我不能讓它工作了。

這是我填充我的組合框(位於類的構造函數中);

        string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
        List<string[]> list = database.Select(command, false);

        cbxCategory.Items.Clear();

        foreach (string[] result in list)
        {
            cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0]));
        }

我似乎無法讓它設置一個默認值,就像我在上面的代碼下面放置cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New") ,它將無法正常工作。

順便說一句,WinForms。

先感謝您。

cbxCategory.SelectedIndex應設置為0Items.Count-1的整數

cbxCategory.SelectedIndex  = 2;

您的

 cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New") 

只要沒有ComboboxItem變換字符串(“New”),就應該返回-1;

另一個解決方案,雖然我不喜歡它會有多少

foreach(object obj in cbxCategory.Items){ 
    String[2] objArray = (String[])obj ;
    if(objArray[1] == "New"){
       cbxCategory.SelectedItem = obj;
       break; 
    }
}

也許這也需要對您的代碼進行以下轉換

    foreach (string[] result in list)
    {
      cbxCategory.Items.Add(result);
    }

我沒有測試代碼,我不確定轉換為String [2],但類似的東西應該工作

看起來您正在搜索cbxCategory.Items集合中的字符串,但它包含ComboBoxItem類型的項目。 因此搜索將返回-1。

您可以使用LINQ。

//string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
//List<string[]> list = database.Select(command, false);
// sample data...
List<string[]> list = new List<string[]> { new string[] { "aaa", "bbb" }, new string[] { "ccc", "ddd" } };

cbxCategory.Items.Clear();

foreach (string[] result in list)
{
    cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0]));
}

ComboBoxItem tmp = cbxCategory.Items.OfType<ComboBoxItem>().Where(x => x.ResultFirst == "bbb").FirstOrDefault();
if (tmp != null)
    cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf(tmp);

ComboBoxItem類:

class ComboBoxItem
{
    public string ResultFirst { get; set; }
    public string ResultSecond { get; set; }

    public ComboBoxItem(string first, string second)
    {
        ResultFirst = first;
        ResultSecond = second;
    }
}

這是我的簡單解決方案

        var list = comboBox1.Items.Cast<string>().ToList();
        cbxCategory.SelectedIndex = list.FindIndex(c => c.StartsWith("test"));

我的解決方案

int? defaultID = null;
foreach (DataRow dr in dataSource.Tables["DataTableName"].Rows)
{
     if ((dr["Name"] != DBNull.Value) && ((string)dr["Name"] == "Default Name"))
     {
          defaultID = (int)dr["ID"];
     }
}
if (defaultID != null) comboBox.SelectedValue = defaultID;

暫無
暫無

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

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