Dynamischer Wert nicht in C # gesetzt wird .NET 4.0

stimmen
1

Ich habe eine Methode in C # .net 4.0 erstellt, die einen dynamischen Typ zurückgibt:

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;
    }

Ich mag die Ergebnisse in einem Verfahren verwendet werden, die so geht:

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;

    }

Aber Wert zurückgegeben wird, nicht in cmbManufactorer oder einer anderen Steuerung eingestellt werden. Getestet habe ich, dass dyanmic Itemwerte hat aber nicht sicher, warum sie nicht gesetzt werden.

Ist es der richtige Weg, es zu handhaben, oder bin ich falsch hier?

Update: Ich benutze diesen Code in einer WPF - Anwendung. SelectedValue Eigenschaft kann get / set dort für Aufklappmenü.

Veröffentlicht am 20/06/2013 um 04:00
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
1

Sie können den Wert in Dropdown so eingestellt Seit SelectedValue is a read only property
Versuchen wie folgt aus : -

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

  cmbManufacturer.SelectedIndex  = item.ManufactorerID;

Oder aber , wenn Sie valuevon Dropdown dann: -

 cmbManufacturer.Items.FindByText("PassedValue").Selected = true;
Beantwortet am 20/06/2013 um 04:13
quelle vom benutzer

stimmen
0

Ich bin nicht sicher über Ihre item.ManufactorerID, welche Art von Wert wird in dem zu kommen.

Dynamik sollte jedoch funktionieren, wenn die Typen kompatibel sind.

Für die Ex:

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

Oder

    dynamic s = 2;
    drop1.SelectedIndex   = s;

beide Werke.

Beantwortet am 20/06/2013 um 04:55
quelle vom benutzer

stimmen
0

In Ordnung, ich habe den Grund, warum es nicht funktioniert. Es ist, weil die GetEntertainmentDetails Methode wurde einen komplexen Ergebnismenge mit einer Reihe von Einzelteilen zurückbringen, also nicht in der Lage, die ManufacturerID oder andere Artikel zu erfahren. Ich änderte den Code wie:

 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;
    }

Und jetzt bin ich in der Lage jede Kontrolle zu binden.

Beantwortet am 20/06/2013 um 05:13
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more