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 IhremcmbContactType
ü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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen, durch diese Methode
FindByValue
Methode für beidecmbContactType
undcmbContactType.Items
index
-1 Wert. Daher auch kein Wert gesetzt in cmbContactType. Eigentlich _row["contacttype ab"] hat int-Wert und FindString erforderliche string-Wert, soindex
-1 Wert.Sollten Sie feststellen, der Typ von der tatsächlichen
ValueMember
in IhremDataSource
beim zuweisen derSelectedValue
um einen gewissen Wert, es soll gewirkt werden, um die Art der tatsächlichenValueMember
in Ihre DataSource.Haben Sie, um sicherzustellen, dass
_row["ContactType"]
muss enthalten sein, indem die item-Werte dercmbContactType
. Wenn nicht, ist dasSelectedItem
null. Sollten Sie einige überprüfen und sehen, ob es hilft._dataSource
es hatValueMember
undDisplayMember
, Und ich Binde diese DataSource, um combo, so dass ich übergeben müssen gleichen Wert und Display-Mitglied, das_dataSource
hat. z.B.valueMember
möglicherweise Wert wie "Name" unddisplayMember
haben kann mit dem Wert "ID".. Ist es nicht?"DisplayMember"
und"ValueMember"
zu Ihremcmb.DisplayMember
undcmb.ValueMember
haben, müssen Sie pass in ParameterdisplayMember
undvalueMember
statt, das ist, was es sein sollte. Sie haben noch Probleme? Ist es immer noch das gleiche wie vorher?cmbContactType.Text
als "{ ValueMember = 1, DisplayMember = Firma }" (Durch Direktfenster).. das bedeutet, dass cmbContactType dont haben den richtigen Wert und Elemente Anzeigen. Bindung fester Wert "DisplayMember" und "ValueMember" bcos_dataSource
haben die gleichen Werte._row["ContactType"]
kann ich sehen, dass deine combobox hat Wert MitgliedValueID
aber wenn Sie zuweisen IhrenSelectedValue
verwenden Sie eine_row["ContactType"]
? Das könnte das problem sein.Schließlich fand ich die Lösung zu meiner Frage, wenn ich mir die Art der cmbContactType.SelectedValue, ich fand es typeof Int16...! und durch die Verwendung der folgenden Anweisung cmbContactType.SelectedValue gesetzt.
cmbContactType.SelectedValue =_row["ContactType"] != null ? Convert.ToInt16(_row["ContactType"]) : (Int16)(-1) ;