2009-07-28 14 views
0

Ich habe einen einfachen Assistenten Abfrage in einem LinqDataSource wie folgt generiert:Wie extrahiere ich zusätzliche Daten von LinqDataSource?

<asp:LinqDataSource ID="EvaluationsData" runat="server" ContextTypeName="Bonus.Models.BonusDataContext" 
    Select="new (Id, Name, Coverage)" TableName="BM_Evaluations" 
</asp:LinqDataSource> 

I weisen Sie diese Datenquelle zu einem Dropdownlist, mit Id und Namen wie die Datavaluefield und Datatext sind. Aber wenn ich eine Option auswähle, möchte ich auch die Abdeckung beibehalten und sie aus der Datenquelle und dem Speicher in einem HiddenField extrahieren. Es ist eine Möglichkeit, dies zu tun, ohne eine weitere Abfrage an die Datenbank zu machen?

Danke.

Antwort

0

Um dies zu tun, müssen Sie die zurückgegebene Liste der Elemente aus der Datenquelle abfangen und dann den Elementen in den Drop-Down-Elementen die Abdeckung manuell zuweisen.

Hier ist Ihr Markup

<asp:LinqDataSource ID="EvaluationsData" runat="server" 
    ContextTypeName="Bonus.Models.BonusDataContext" 
    Select="new (Id, Name, Coverage)" TableName="BM_Evaluations" 
    onselected="EvaluationsData_Selected"> 
</asp:LinqDataSource> 
<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="EvaluationsData" DataValueField="Id" DataTextField="Name" 
    ondatabound="DropDownList1_DataBound"> 
</asp:DropDownList> 

Hier ist der Code

List<object> evaluations; 
protected void EvaluationsData_Selected(object sender, LinqDataSourceStatusEventArgs e) 
{ 
    evaluations = new List<object>(e.Result as IEnumerable<object>); 
} 
protected void DropDownList1_DataBound(object sender, EventArgs e) 
{ 
    foreach (ListItem item in DropDownList1.Items) 
    { 
     var eval = evaluations.Where(a => a.Id == item.Value).FirstOrDefault(); 
     if (eval != null) 
     { 
      item.Attributes.Add("Coverage", eval.Coverage); 
     } 
    } 
} 
Verwandte Themen