DataGridのクリックイベントでcomboBox
の選択したアイテムを設定しようとしていますが、できませんでした。私はグーグルしてさまざまな方法を試しましたが、成功しませんでした。
私にとってはSelectedIndex
は機能していますが、ComboBoxに項目のインデックスが見つからなかったため、項目を選択できませんでした。
機能しないコード:
for (int i = 0; i < cmbVendor.Items.Count; i++)
if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")))
{
cmbVendor.SelectedIndex = i;
break;
}
.Items.IndexOf()
メソッドでアイテムインデックスを取得できます。これを試して:
comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));
反復する必要はありません。
詳細については、スタックオーバーフローの質問C#を使用して、comboBoxで選択したアイテムを文字列と一致するように設定するにはどうすればよいですか?。
次は私のために完全に働いています。コンボボックスで利用可能な任意の値またはテキストを渡します。
comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
あなたはあなたの中にそれを持っています:
cmbVendor.SelectedItem = cmbVendor.Items[i];
とうとう見つけた。それは:
cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
SelectedTextプロパティは、コンボボックスのテキストボックス部分にある編集可能なテキストの選択された部分です。
gridView1.GetFocusedRowCellValue("vVendor")
が実際に期待どおりに機能すると仮定すると、次のコードで問題を解決できます。
_string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
foreach ( var item in cmbVendor.Items )
{
if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0)
{
cmbVendor.SelectedItem = item;
break;
}
}
_
元のコードではgridView1.GetFocusedRowCellValue("vVendor")
を複数回呼び出していましたが、必要なのは1つだけです。
提案された「comboBox1.Items.IndexOf(」は、_cmbVendor.Items
_の内容について多すぎると想定しています。
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String From DataGrid Cell value")
これを試してください、これはC#Windowsアプリケーションで正常に動作します
ComboBoxコントロールのValueMemberプロパティを設定した場合は、値をComboBoxコントロールのSelectedValueプロパティに割り当てるだけです。インデックスを明示的に見つける必要はありません。次に例を示します。
public class Vendor{
public int VendorId {get; set;}
public string VendorName {get; set;}
}
// Inside your function
var comboboxData = new List<Vendor>(){
new Vendor(){ vendorId = 1, vendorName = "Vendor1" },
new Vendor(){ vendorId = 2, vendorName = "Vendor2" }
}
cmbVendor.DataSource = comboboxData;
cmbVendor.DisplayMember = "VendorName";
cmbVendor.ValueMember = "ValueId";
// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do:
cmbVendor.SelectedValue = 2;
私は同様の問題を抱えており、ここで他の回答の助けを借りて部分的に解決しました。まず、私の特定の問題は
combobox1.SelectedItem = myItem;
期待どおりに動作していませんでした。根本的な原因は、myItemがコンボボックス内のアイテムと実質的に同じリストであるグループのオブジェクトであったが、実際にはそれらのアイテムのコピーであったことです。したがって、myItemは有効なエントリと同じでしたが、それ自体はcombobox1コンテナからの有効なオブジェクトではありませんでした。
解決策は、次のようにSelectedItemではなくSelectedIndexを使用することでした。
combobox1.SelectedIndex = get_combobox_index(myItem);
どこ
private int get_combobox_index(ItemClass myItem)
{
int i = 0;
var lst = combobox1.Items.Cast<ItemClass >();
foreach (var s in lst)
{
if (s.Id == myItem.Id)
return i;
i++;
}
return 0;
}