1

我在 C#.net 4.0 中创建了一个返回动态类型的方法:

public dynamic  GetEntertainmentDetails(int entertainmentId)
    {
        dynamic result = from PE in entities.ProductEntertainments
                     join PM in entities.ProductModels on PE.ProductModelID equals PM.ProductModelID
                     join PMA in entities.ProductMasters on PM.ProductUID equals PMA.ProductUID
                     join PMF in entities.ProductManufactorers on PMA.ManufactorerID equals PMF.ManufactorerID
                     where PE.EntertainmentID == entertainmentId
                     select new { PE.EntertainmentID, PMF.ManufactorerID, PMA.ProductUID, PM.ProductModelID, PE.CDPlayer, PE.CDChanger, PE.DVDPlayer, PE.Radio, PE.AudioSystemRemoteControl, PE.SpeakersFront, PE.SpeakersRear };
        return result;
    }

我想在这样的方法中使用结果:

private void DisplayRecord()
    {
        dynamic item = dbContext.GetEntertainmentDetails(entertainmentId);
        this.cmbManufacturer.SelectedValue = item.ManufactorerID;
        this.cmbProducts.SelectedValue = item.ProductUID;
        this.cmbVariant.SelectedValue = item.ProductModelID;
        if (item.CDPlayer == true)
            this.cdPlayerYes.IsChecked = true;
        else
            this.cdPlayerNo.IsChecked = true;

    }

但是没有在 cmbManufactorer 或任何其他控件中设置返回的值。我测试了动态项目具有值,但不确定为什么没有设置它们。

这是处理它的正确方法还是我在这里做错了?

更新: 我在 WPF 应用程序中使用此代码。SelectedValue 属性可以在下拉列表中获取/设置。

4

3 回答 3

1

您不能像这样在下拉列表中设置值,因为SelectedValue is a read only property
这样尝试:-

// Assuming item.ManufactorerID is returning the index of selected item:- 

  cmbManufacturer.SelectedIndex  = item.ManufactorerID;

否则,如果您有value下拉菜单,则:-

 cmbManufacturer.Items.FindByText("PassedValue").Selected = true;
于 2013-06-20T05:13:41.370 回答
0

好吧,我明白了为什么它不起作用的原因。这是因为 GetEntertainmentDetails 方法正在返回一个包含项目数组的复杂结果集,因此无法找到制造商 ID 或任何其他项目。我将代码更改为:

 public dynamic  GetEntertainmentDetails(int entertainmentId)
    {
        dynamic result = (from PE in entities.ProductEntertainments
                     join PM in entities.ProductModels on PE.ProductModelID equals PM.ProductModelID
                     join PMA in entities.ProductMasters on PM.ProductUID equals PMA.ProductUID
                     join PMF in entities.ProductManufactorers on PMA.ManufactorerID equals PMF.ManufactorerID
                     where PE.EntertainmentID == entertainmentId
                     select new 
                     { 
                         PE.EntertainmentID, 
                         PMF.ManufactorerID, 
                         PMA.ProductUID, 
                         PM.ProductModelID, 
                         PE.CDPlayer, 
                         PE.CDChanger, 
                         PE.DVDPlayer, 
                         PE.Radio, 
                         PE.AudioSystemRemoteControl, 
                         PE.SpeakersFront, 
                         PE.SpeakersRear 
                     }).SingleOrDefault();
        return result;
    }

现在我可以绑定每个控件了。

于 2013-06-20T06:13:20.703 回答
0

我不确定你的 item.ManufactorerID 会有什么样的价值。

但是,如果类型兼容,动态应该可以工作。

例如:

    dynamic s = "Item 3";
    drop1.SelectedValue  = s;

或者

    dynamic s = 2;
    drop1.SelectedIndex   = s;

两者都有效。

于 2013-06-20T05:55:48.283 回答