asp.net - 绑定到linq数据源并添加外部列

时间:2011-07-21 01:23:48

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

我有一个显示网格的数据绑定控件。网格绑定到linq到sql数据源。我使用以下代码:

PaymentsDataContext data = new PaymentsDataContext();
            var q = from act in data.activations
                    where act.approved != true
                    orderby act.activationDate ascending
                    select new {activationID = act.activationID, userName = act.userName,
                    brokerName = act.broker.brokerName, existingAccount = act.existingAccount,
                    activationDate = act.activationDate, brokerUser = act.brokerUser, approved = act.approved};
            activationPending.DataSource = q;
            activationPending.DataBind();

我想在网格中添加另一列。我想显示用户的电子邮件地址。 我这样得到了:

var member = System.Web.Security.Membership.GetUser(username);
string email = member.Email;

我如何将其添加为网格中的字段,因为它根本不在付款数据库中?

2 个答案:

答案 0 :(得分:2)

试试这个:

var q = from act in data.activations
                    where act.approved != true
                    orderby act.activationDate ascending
                    select new {activationID = act.activationID, userName = act.userName,
                    brokerName = act.broker.brokerName, 
                    existingAccount = act.existingAccount,
                    activationDate = act.activationDate, brokerUser = act.brokerUser,
                    approved = act.approved, 
                    email = System.Web.Security.Membership.GetUser(act.userName).Email };

因为您已经将q而不是data.activations分区,所以这会将外部列添加到网格中。

编辑: 由于新添加的列,网格视图的模板必须有一个位置 要接受它,您可以手动添加:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
<Columns>
.
.
<asp:BoundField DataField="email" HeaderText="email" 
            SortExpression="email" />
.
.
</Columns>
 </asp:GridView>

或将名为AutoGenerateColumns的gridview的属性设置为true

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
    </asp:GridView> 

答案 1 :(得分:0)

您可以编写Extension方法并在select中使用它。请检查此topic

 private Func<DataClasses.Activations, String> GetUserEmail(string username)
 {
    return System.Web.Security.Membership.GetUser(username).Email;
 }

 PaymentsDataContext data = new PaymentsDataContext();
        var q = from act in data.activations
                where act.approved != true
                orderby act.activationDate ascending
                select new {activationID = act.activationID, userName = act.userName,
                brokerName = act.broker.brokerName, existingAccount = act.existingAccount,
                activationDate = act.activationDate, brokerUser = act.brokerUser, approved = act.approved, 
                Email = GetUserEmail(act.username)};