windows formには、ComboBoxがあります。データソース。
ComboBoxのテキストプロパティを設定する場合。
選択されたComboBox->プロパティ->テキスト: "--Select--"。
設計ページには、指定されたテキストが表示されます。しかし、アプリケーションを実行すると、指定されたテキストが消え、comboBoxアイテムの初期インデックス値が表示されます。これは、DataSourceからのものです。
そのため、フォームのロードでComboBoxテキストを指定しました。コンストラクターで
public myform()
{
InitializeComponent();
ComboBox.Text="--Select--";
}
リンクの改訂など。しかし..
https://msdn.Microsoft.com/en-us/library/system.windows.forms.combobox.text(v = vs.110).aspx
SOで多くの質問を検索しました。ComboBoxに依存します。しかし、それらは私の場合を決して解決しません
編集済み
そのコンボボックスで、右上隅をクリックし、そこからDatasouceを使用してコンボボックスのデータを選択しました。コンボボックスにアイテムを追加するためのコードは書きませんでした。
次のようなことができます:
public myform()
{
InitializeComponent(); // this will be called in ComboBox ComboBox = new System.Windows.Forms.ComboBox();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'myDataSet.someTable' table. You can move, or remove it, as needed.
this.myTableAdapter.Fill(this.myDataSet.someTable);
comboBox1.SelectedItem = null;
comboBox1.SelectedText = "--select--";
}
コンボボックスをList<Person>
にバインドするとします
List<Person> pp = new List<Person>();
pp.Add(new Person() {id = 1, name="Steve"});
pp.Add(new Person() {id = 2, name="Mark"});
pp.Add(new Person() {id = 3, name="Charles"});
cbo1.DisplayMember = "name";
cbo1.ValueMember = "id";
cbo1.DataSource = pp;
この時点では、Textプロパティを好きなように設定することはできませんが、代わりにデータソースを設定する前にリストにアイテムを追加する必要があります
pp.Insert(0, new Person() {id=-1, name="--SELECT--"});
cbo1.DisplayMember = "name";
cbo1.ValueMember = "id";
cbo1.DataSource = pp;
cbo1.SelectedIndex = 0;
もちろん、これはコンボボックスからの情報を使用しようとするときにチェックコードを追加する必要があることを意味します
if(cbo1.SelectedValue != null && Convert.ToInt32(cbo1.SelectedValue) == -1)
MessageBox.Show("Please select a person name");
else
......
リストの代わりにDataTableを使用する場合、コードは同じです。データテーブルのRowsコレクションの最初の位置に偽の行を追加し、コンボボックスの初期インデックスを設定して物事を明確にする必要があります。確認する必要があるのは、データテーブル列の名前と、行をコレクションに追加する前にどの列に非NULL値を含める必要があるかだけです
ID、FirstName、LastName、ID、FirstName、LastNameのような3つの列が必要なテーブルでは、次のことが必要です。
DataRow row = datatable.NewRow();
row["ID"] = -1;
row["FirstName"] = "--Select--";
row["LastName"] = "FakeAddress";
dataTable.Rows.InsertAt(row, 0);