2013-06-12 44 views
1

我在窗体上有一个组合框 - “cboCurPartNum”。当我打开表单并填充现有数据时,我的组合框不显示存储在SQL Server中的值。组合框的加载不显示选定的值

如何让我的组合框显示我的记录中的值?

这里发生了什么是在“修改工程订单”模式下打开表格。因此,声明

public EngOrd engord; 

包含正在打开的工程订单的数据。

问题在于“修改工程订单”部分中的"addEngOrd" = false。您将在那里看到调用方法“PutNewEngOrd()”,并且newEngOrd对象被分配了打开的工程订单的现有值。

我的问题是与组合框“cboCurPartNum”,它具有以下一组:

Data Source - partBindingSource 
Display Member - PartNumber 
Value Member - PartNumber 
Selected Value - engOrderBindingSource - CurPartNum 

该组合框应该有“newEngOrd”分配的部分号码,因为“engordBindingSource.Add(newEngOrd);”后,被称为“PutNewEngOrd()”被运行。

为什么我的零件编号不显示在组合框中?部件号存储在数据库中。

这里是我的代码:

public partial class frmEngOrdAddModify : Form 
{ 
    public frmEngOrdAddModify() 
    { 
     InitializeComponent();    
    } 

    public bool addEngOrd; //indicates if adding to the form or not 
    public EngOrd engord; //data from the frmEngOrd (old eng order) 
    private EngOrd newEngOrd; //new data we are capturing here (new eng ord) 


    private void frmEngOrdAddModify_Load(object sender, EventArgs e) 
    { 
     this.LoadComboBoxes();   

     if (addEngOrd) 
     { 
      this.Text = "Add Engineering Order"; 
      newEngOrd = new EngOrd(); 
      engordBindingSource.Clear(); 
     } 
     else 
     { 
      this.Text = "Modify Engineering Order"; 
      newEngOrd = new EngOrd();     
      this.PutNewEngOrd(); 
     } 
     engordBindingSource.Add(newEngOrd); //put the existing or a new EngOrd dataset with the binding source 


    } 

    private void LoadComboBoxes() 
    { 

     List<EngOrdType> engOrdTypeList; 
     engOrdTypeList = EngOrdTypeDB.GetEngOrdType(); 
     cboEOFileType.DataSource = engOrdTypeList; 
     cboEOFileType.SelectedIndex = -1; 

     List<Customer> customerList; 
     customerList = CustomerDB.GetCustomerTeamList(); 
     cboCustomer.DataSource = customerList; 
     cboCustomer.SelectedIndex = -1; 

     List<Part> partList; 
     partList = PartDB.GetPartList(); 
     cboCurPartNum.DataSource = partList;    
     cboCurPartNum.SelectedIndex = -1; 

     // with modify mode intially display the value passed in from engord 
     if (addEngOrd == false) 
     { 
      MessageBox.Show("assign here " + engord.CurPartNum); 
      cboCurPartNum.SelectedValue = engord.CurPartNum; 
     } 
    } 

    private void PutNewEngOrd() 
    { 
     newEngOrd.EO = engord.EO; 
     newEngOrd.EONum = engord.EONum; 
     newEngOrd.FileType = engord.FileType; 
     newEngOrd.JobNum = engord.JobNum; 
     newEngOrd.QuoteNum = engord.QuoteNum; 
     newEngOrd.CustID = engord.CustID; 
     newEngOrd.CurPartNum = engord.CurPartNum;    

    } 

}

这是设计师生成的代码为 “cboCurPartNum”

this.cboCurPartNum.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.engordBindingSource, "CurPartNum", true)); 
this.cboCurPartNum.DataSource = this.partBindingSource; 
this.cboCurPartNum.DisplayMember = "PartNumber"; 
this.cboCurPartNum.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
this.cboCurPartNum.FormattingEnabled = true; 
this.cboCurPartNum.Location = new System.Drawing.Point(142, 23); 
this.cboCurPartNum.Name = "cboCurPartNum"; 
this.cboCurPartNum.Size = new System.Drawing.Size(179, 21); 
this.cboCurPartNum.TabIndex = 11; 
this.cboCurPartNum.ValueMember = "PartNumber"; 
this.cboCurPartNum.SelectionChangeCommitted += new System.EventHandler(this.cboCurPartNum_SelectionChangeCommitted_1) 

这是我现在有: 这是我现在有了。我需要什么来设置SelectedValue?

 private void LoadComboBoxes() 
    { 

     List<EngOrdType> engOrdTypeList; 
     engOrdTypeList = EngOrdTypeDB.GetEngOrdType(); 
     cboEOFileType.DataSource = engOrdTypeList; 
     cboEOFileType.SelectedIndex = -1; 

     List<Customer> customerList; 
     customerList = CustomerDB.GetCustomerTeamList(); 
     cboCustomer.DataSource = customerList; 
     cboCustomer.SelectedIndex = -1; 
     //MessageBox.Show(cboCustomer.SelectedItem.ToString()); 
     //MessageBox.Show(cboCustomer.SelectedValue.ToString()); 

     List<Part> partList; 
     partList = PartDB.GetPartList(); 
     cboCurPartNum.DataSource = partList; 
     cboCurPartNum.SelectedIndex = -1; 
     if (addEngOrd == false) 
     { 
      cboCurPartNum.SelectedItem = partList[1]; 

     } 

    } 
+0

确保数据源是不是空的或空的。为了能够在该组合框中显示选定的值,您应该已经将数据源填充到从中选择了该项目的集合 – meorfi

+0

组合框具有来自数据源“partBindingSource”的值。存储在数据库中的值是数据源中的有效值。 – maverick07281975

+0

@Nancy你确定'CurPartNum'和'PartNumber'的数据类型是否相同?他们应该是一样的。我想'CurPartNum'的所有​​可能值都包含在'PartNumber'列中,​​如果不是这样的话。 –

回答

1

cboCurPartNum.SelectedValue =/这里syou应该设置一个“Part”类型的项目。对于实例PARTLIST [0]/

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     LoadComboboxes(); 
    } 

    public void LoadComboboxes() { 
     List<Part> partList = PartDB.GetPartList(); 
     cboCurPartNum.DataSource = partList; 
     cboCurPartNum.SelectedIndex = -1; 
     var addEngOrd = false; 
     if (addEngOrd == false) { 
      //MessageBox.Show("assign here " + 1); 
      cboCurPartNum.SelectedItem = partList[1]; 
     } 
    } 
    } 
    public static class PartDB { 
    static PartDB() { 
     PartList = new List<Part> { 
     new Part { 
      One = 1, 
      Two = "unos" 
     }, 
     new Part { 
      One = 2, 
      Two = "duos" 
     } 
     }; 
    } 

    private static readonly List<Part> PartList; 
    public static List<Part> GetPartList() { 
     return PartList; 
    } 
    } 

    public class Part { 
    public int One { get; set; } 
    public string Two { get; set; } 
    } 
} 

另外,确保将DisplayMember设为您要在组合框中看到的属性(见附件) enter image description here

+0

为完整的解决方案写信给我:) – meorfi

+0

我该怎么写你?我是这个论坛的新手。我如何设置SelectedValue? – maverick07281975

+1

我找到了问题。在partBindingSource中有数据回车。这些数据来自另一个系统。 – maverick07281975

0

我看不到为您设置DisplayMember属性的位置ComboBoxes - 它是否在Designer生成的代码中? 尝试以编程方式设置DisplayMember属性,并重新检查DisplayMember值是否与需要显示的Part类属性的名称相匹配。

+0

中的一个值进行保存。另外 - 对ComboBoxes查看值做另一个?该问题是否仅显示与cboCurPartNum组合框? –

+0

其他ComboBoxes正在查看值。 DisplayMember正在设计器生成的代码中设置。 – maverick07281975

+0

该问题仅适用于cboCurPartNum – maverick07281975