如何从LinqDataSource中提取额外的数据?

时间:2009-07-28 21:59:41

标签: asp.net linq linq-to-sql

我在LinqDataSource中有一个简单的向导生成查询,如下所示:

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

我将此数据源分配给DropDownList,分别使用Id和Name作为DataValueField和DataTextField。但是当我选择一个选项时,我也希望保留Coverage,从数据源中提取它并在HiddenField中存储。这是一种在不对数据库进行另一次查询的情况下执行此操作的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

为此,您需要截取数据源中返回的项目列表,然后手动将Coverage分配给下拉项目中的项目。

这是你的标记

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

这是你的代码

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