そのため、コンボボックスのデフォルト値を設定しようと考えてきました。いくつかのものを見つけましたが、どれも機能していないようです。
実際、単純なコンボボックスを作成して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
は0
からItems.Count-1
の整数に設定する必要があります
cbxCategory.SelectedIndex = 2;
きみの
cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
comboboxItemが文字列をミュートしない限り、-1を返す必要があります(「New」)。
別の解決策は、私はそれがあまり好きではないが
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]へのキャストについてはわかりませんが、似たようなものが動作するはずです
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;
}
}
CbxCategory.Itemsコレクションで文字列を検索しているように見えますが、ComboBoxItem型のアイテムが含まれています。したがって、検索は-1を返します。
これが私の簡単な解決策です
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;