私はコンボボックスの名前をcmbContactType
. このコンボを、dataSource を DisplayMember ValueName
(文字列型) として、valueMember をValueID
(数値型) としてバインドしました。ユーザーが cmbContactType の値を変更すると、cmbContactType.SelectValue が設定され、この Selectedvalue でドキュメントを保存できます。タイプ番号のデータベースから cmbContactType 値を設定しているときに問題に直面しています。値を設定しようとするたびに、null
値が に設定されますcmbContactType.SelectValue
。以下は、データソースをにバインドしcmbContactType
、SelectedValue を設定するためのコードですcmbContactType
。VS2010 と MS-Access を使用しています。助けてください。
//method to bind dataSource.
public static void BindDataSourceWithCombo(ref ComboBox cmb, string query, string valueMember, string displayMember)
{
DataTable _tableSource = (new AccessConnectionManager()).GetDataTableBySQLQuery(query);
var _dataSource = (from DataRow _row in _tableSource.Rows
select new
{
ValueMember = _row[valueMember],
DisplayMember = _row[displayMember].ToString()
}).ToList();
cmb.DisplayMember = "DisplayMember";
cmb.ValueMember = "ValueMember";
cmb.DataSource = _dataSource;
}
// Method to set values in document.
public void SetDocumentProperties()
{
string _query = string.Format("Select ContactCode,ContactName,ContactType from ContactMaster where ContactCode = '{0}'", Convert.ToString(cmbContactCode.Text));
DataTable _table = AccessConnectionManagers.GetDataTableBySQLQuery(_query);
if (_table.Rows.Count > 0)
{
DataRow _row = _table.Rows[0];
txtContactCode.Text = Convert.ToString(_row["ContactCode"]);
txtContactName.Text = Convert.ToString(_row["ContactName"]);
cmbContactType.SelectedValue = _row["ContactType"];
}
else
{
txtContactCode.Text = string.Empty;
txtContactName.Text = string.Empty;
cmbContactType.SelectedValue = 1;
}
}
これは、dataSource を cmbConactType にバインドするコードです。このメソッドは Form_Load イベントで呼び出します。
private void LoadContactTypeCombo()
{
//Table: PicklistValues(ID,MasterID,ValueID,ValueName)
string _query = string.Format("select ValueID,ValueName from PicklistValues where MasterID = {0}", 1);
BindDataSourceWithCombo(ref cmbContactType, _query, "ValueID", "ValueName");
}