2

私はコンボボックスの名前を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");
    }
4

3 に答える 3

3

この方法で試す

int index;
// Search the Item that matches the string
index=cmbContactType.FindString(_row["ContactType"]);
// Select the Item in the Combo
cmbContactType.SelectedIndex=index;
于 2013-08-08T07:13:36.987 に答える
0

最後に、私の質問に対する解決策を見つけました。cmbContactType.SelectedValue のタイプを探すと、typeof Int16 であることがわかりました...! 次のステートメント cmbContactType.SelectedValue を使用して設定します。

cmbContactType.SelectedValue =_row["ContactType"] != null ? Convert.ToInt16(_row["ContactType"]) : (Int16)(-1) ;

于 2013-08-08T09:46:06.097 に答える