2017-11-01 1 views
0

Ich habe eine ComboBox in einem WinForm, das ich entwickle. Wenn die Auswahl auf der ComboBox geändert wird, setzt das Formular die ProjectManager dass sie und ruft sie aus einem Wörterbuch, den Namen des PM unter Verwendung als Schlüssel. nur das Bestehen den Name des WörterbuchComboBox übergibt ausgewählten Text nicht an Wörterbuch

sollte die ComboBox sein, sondern es ist vorbei etwas ganz andere

Der frm_About_PM Code:

public partial class frm_About_PM : Form 
    { 

     private string _Name; 
     private ProjectManager _Manager; 
     private Dictionary<string, Project> _Projects; 
     private Dictionary<string, ProjectManager> _OtherManagers; 

     public string Name 
     { 
      get 
      { 
       return _Name; 
      } 

      set 
      { 
       _Name = value; 
      } 
     } 

     public frm_About_PM() 
     { 
      InitializeComponent(); 
     } 

     public frm_About_PM(string Name) 
     { 
      InitializeComponent(); 
      _Name = Name; 
      lbl_PM_Name.Text = "Statistics - " + _Name; 
     } 

     public frm_About_PM(ProjectManager projectManager) 
     { 
      InitializeComponent(); 
      _Manager = projectManager; 
      _Name = _Manager.Name; 
      InitiateCharts(); 
     } 

     public frm_About_PM(ProjectManager projectManager, Dictionary<string, ProjectManager> OtherManagers) 
     { 
      InitializeComponent(); 
      _Manager = projectManager; 
      _Name = _Manager.Name; 
      _OtherManagers = OtherManagers; 

      //Load the ComboBox 
      if ((_OtherManagers.Count > 0) || (_OtherManagers != null)) 
      { 
       cmbo_ManagerSelect.DataSource = new BindingSource(_OtherManagers,null); 
       cmbo_ManagerSelect.DisplayMember = "Key"; 
       cmbo_ManagerSelect.ValueMember = "Value"; 
      } 

      InitiateCharts(); 
     } 

     private void InitiateCharts() 
     { 
      lbl_PM_Name.Text = "Statistics - " + _Name + ":: " + _Manager.ProjectCount + " Projects"; 

      Dictionary<string, double> BudgetValues = new Dictionary<string, double>(); 
      Dictionary<string, double> ActualValues = new Dictionary<string, double>(); 
      Dictionary<string, DateTime> StartDateValues = new Dictionary<string, DateTime>(); 
      Dictionary<string, DateTime> EndDateValues = new Dictionary<string, DateTime>(); 
      Dictionary<string, double> CompletionValues = new Dictionary<string, double>(); 
      Dictionary<string, double> DurationValues = new Dictionary<string, double>(); 

      //Load the Chart 
      foreach (Project P in _Manager.ProjectList.Values) 
      { 
       TimeSpan Duration = P.PlannedEnd - P.PlannedStart; 
       BudgetValues.Add(P.ProjectNumber, P.BudgetCost); 
       ActualValues.Add(P.ProjectNumber, P.ActualCost); 
       StartDateValues.Add(P.ProjectNumber, P.PlannedStart); 
       EndDateValues.Add(P.ProjectNumber, P.PlannedStart.Subtract(Duration)); 
       CompletionValues.Add(P.ProjectNumber, P.PercentComplete); 
       DurationValues.Add(P.ProjectNumber, Duration.TotalDays); 

      } 

      chart_Projects.Series["Budget"].Points.DataBindXY(BudgetValues.Keys.ToArray(), BudgetValues.Values.ToArray()); 
      chart_Projects.Series["Actual"].Points.DataBindXY(ActualValues.Keys.ToArray(), ActualValues.Values.ToArray()); 
      chart_Completion.Series["Completion"].Points.DataBindXY(CompletionValues.Keys.ToArray(), CompletionValues.Values.ToArray()); 
      chart_Dates.Series["Start Fill"].Points.DataBindXY(StartDateValues.Keys.ToArray(), StartDateValues.Values.ToArray()); 
      chart_Dates.Series["Duration"].Points.DataBindXY(DurationValues.Keys.ToArray(), DurationValues.Values.ToArray()); 
      chart_Dates.ChartAreas["Dates"].AxisY.Minimum = _Manager.EarliestStart.ToOADate(); 
      chart_Dates.ChartAreas["Dates"].AxisY.Maximum = _Manager.LatestEnd.ToOADate(); 
      chart_Dates.ChartAreas["Dates"].AxisX.Interval = 1; 
      chart_Projects.ChartAreas["BudgetChart"].AxisX.Interval = 1; 
     } 

     private void cmbo_ManagerSelect_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Debug.Print("Manager Name is: '{0}'", cmbo_ManagerSelect.Text); 
      _Manager = Globals.PMO_Workbook.Controller.Managers[cmbo_ManagerSelect.SelectedText]; 

      _Name = _Manager.Name; 
      InitiateCharts(); 
     } 
    } 

Der Ausgang Ich bin von der letzten Debug.Print Anweisung bekommen ist dies:

Manager Name is: '[John Snow, PMO_KPAT_Dashboard.Classes.ProjectManager]'

Aber es sollte nur b e vorbei John Snow.

Antwort

1

Combobox Element ist KeyValuePair<string,ProjectManager>, so dass es die Ausgabe, die Sie erhalten, ist die richtige ein. Was Sie benötigen, ist Key Eigenschaft SelectedItem, die Sie auf diese Weise erreichen können:

Debug.Print("Manager Name is: '{0}'", ((KeyValuePair<string,ProjectManager>)comboBox1.SelectedItem).Key); 
+0

wirkt wie ein Zauber! Jetzt habe ich ein neues Problem: Wie kann ich das SelectedIndexChanged-Ereignis stoppen, wenn ich die Bindung an die ComboBox lade? – jDave1984

+0

Niemals. Habe diesen Teil. Habe gerade den Event-Handler entfernt. Danke noch einmal! – jDave1984

Verwandte Themen