SelectedValue für die ComboBox nicht immer gesetzt

Habe ich comboBox, in der Namen wie cmbContactType. Ich gebunden diese combo mit als dataSource DisplayMember ValueName(Typ string) und valueMember als ValueID(Anzahl-Typ). Wenn der Benutzer verändern Sie den Wert in cmbContactType dann cmbContactType.SelectValue eingestellt und ich bin in der Lage, speichern Sie das Dokument mit diesem Selectedvalue. Ich vor problem bei der Einstellung cmbContactType Wert aus der Datenbank, die ist vom Typ Zahl. Jedes mal, wenn ich versuche den Wert festlegen, null Wert cmbContactType.SelectValue.
Im folgenden ist der code mit dem ich am binding datasource, um cmbContactType und für die Einstellung SelectedValue der cmbContactType. Ich bin mit VS2010 und MS-Access. Bitte helfen Sie.

    //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;
        }
    }

Hier ist der code mit dem ich das binden der dataSource mit cmbConactType. Der Aufruf dieser Methode auf Form_Load-Ereignis.

    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");
    }
  • prüfen Sie zunächst, ob _row["contacttype ab"] wird mit jedem Wert. Wenn ja, dann versuchen Sie, Gießen Sie es auf int um, bevor er es zu SelectedValue
  • Ja, _row["ContactType"] hat einen Wert. Ich habe versucht _row["ContactType"] != null ? Convert.ToInt32(_row["ContactType"]) : -1 dies auch. Aber war nicht die Arbeit.
  • was ist die Datenquelle des cmbContactType?
  • König, ja check dataSource. Es hat 6 Werte mit Display-Mitglied und valueMember
  • Ich sehe nicht, weisen Sie einige DataSource zu Ihrem cmbContactType überall in Ihrem code. Es ist wichtig, um Ihr problem zu lösen.
  • König, Hinzugefügten code die DataSource binden.
  • überprüfen Sie nun, meinen post habe ich editiert
  • Sie brauchen nicht die ref Schlüsselwort.
  • Ja, es ist wahr.. hier Methode argument vom Typ der Referenz. Lernen Fehler!

Schreibe einen Kommentar