C# Combobox-初始值是正确的,之后的任何调用都会在施法过程中出错

C# Combobox-初始值是正确的,之后的任何调用都会在施法过程中出错,c#,combobox,C#,Combobox,我正在尝试获取组合框的guid值 这是我的密码: private void PopulateComboBox() { using (var ent = new SuburbanPortalEntities()) { var qry = (from x in ent.Corporations select x).ToList(); comboBox_CompanyId.DataSource = qry; comboBox_CompanyId.Disp

我正在尝试获取组合框的guid值

这是我的密码:

private void PopulateComboBox()
{

  using (var ent = new SuburbanPortalEntities())
  {
    var qry = (from x in ent.Corporations
      select x).ToList();

    comboBox_CompanyId.DataSource = qry;
    comboBox_CompanyId.DisplayMember = "CompanyCode";
    comboBox_CompanyId.ValueMember = "CorporationId";
  }
}
我在这里引用它:

   private void comboBox_CompanyId_SelectedIndexChanged(object sender, EventArgs e)
    {
      using (var ent = new SuburbanPortalEntities())
      {
        var corpid = ((Corporation) comboBox_CompanyId.SelectedValue).CorporationId;
        // ^^ this is where the exception occurs
        //var corpid = (Guid) comboBox_CompanyId.SelectedValue;
        // ^^ tried this but the form initialization gives an exception

        if (corpid == Guid.Empty) return;

        var qry = (from x in ent.Trucks
          where x.CorporationId == corpid
                orderby x.TruckNumber
          select x).ToList();

        if (!qry.Any()) return;

        comboBox_TruckNumber.DataSource = qry;
        comboBox_TruckNumber.DisplayMember = "TruckNumber";
        comboBox_TruckNumber.ValueMember = "TruckId";

      }
我第一次得到corpid时,在表单初始化期间,它工作得很好。当我更改组合框中的值时,会出现以下错误:

无法将“System.Guid”类型的对象强制转换为 卡车交易.数据.公司'

我不确定我是否理解为什么组合框中的类型正在更改

而不是

comboBox_CompanyId.SelectedValue

问题解决了

下面是发生的情况

// here
var corpid = ((Corporation) comboBox_CompanyId.SelectedValue).CorporationId;
// comboBox_CompanyId.SelectedValue is already corporation id
// because you did this --> comboBox_CompanyId.ValueMember = "CorporationId";
// so you should be able to do
var corpid = (cast type)comboBox_CompanyId.SelectedValue;
// or, do what I said above

另一方面,首先设置
DisplayMember
ValueMember
。分配
DataSource
last-performance

在这里,您用公司填充comboBox\u CompanyId:

comboBox_CompanyId.DataSource = qry;
comboBox_CompanyId.DisplayMember = "CompanyCode";
在这里,您告诉它使用所选
公司
(a
Guid
)的
CorporationId
属性作为
SelectedValue

comboBox_CompanyId.ValueMember = "CorporationId";
在这里,您使用
SelectedValue
,您坚持认为它必须是
Guid
,然后将其转换为
Corporation
,结果可以预测:

    var corpid = ((Corporation) comboBox_CompanyId.SelectedValue).CorporationId;
现在,您可以通过设置断点并将鼠标悬停在调试器中的
comboBox\u CompanyId.SelectedValue
上,而不是在internet上询问陌生人您自己桌面上运行的代码中发生了什么。然后您会发现,
comboBox\u CompanyId.SelectedValue
已经是您想要的CorporationId

tl;博士
comboBox\u CompanyId.SelectedItem
是一家
公司

它是在这个明显无效的演员阵容上,还是在其他地方<代码>((公司)组合框\u CompanyId.SelectedValue)。您竭尽全力让它将
SelectedValue
设置为Guid。然后你将
SelectedValue
转换成
Corporation
@EdPlunkett是的,我在上面添加了一些注释来说明它在哪里给出了例外。这里是提示。如果你匆匆忙忙地接受答案,你会错过你的问题。如果你一天都不接受,你会有很多人来给你想法等@t.S.谢谢你的信息!我会记住这一点的。泰来回答。我把它放在那里,我“认为”我测试了它,但显然不够好。谢谢你的帮助!谢谢你的帮助!我也改变了后半部分。
    var corpid = ((Corporation) comboBox_CompanyId.SelectedValue).CorporationId;
var corpId = (Guid)comboBox_CompanyId.SelectedValue;