asp.net - привязка к источнику данных linq и добавление внешнего столбца - PullRequest
3 голосов
/ 21 июля 2011

У меня есть элемент управления с привязкой к данным, который отображает сетку. Сетка связана с источником данных linq to 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 ]

2 голосов
/ 21 июля 2011

попробуйте это:

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

, поскольку вы уже bin q, а не data.activations, это добавляет внешний столбец в сетку.

Редактировать: Из-за нового добавленного столбца ваш шаблон вида сетки должен иметь место чтобы принять его, вы можете добавить это вручную, например:

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

или установите для свойства вида сетки с именем AutoGenerateColumns значение true

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
    </asp:GridView> 
0 голосов
/ 21 июля 2011

вы можете написать метод расширения и использовать его по своему выбору.Проверить эту тему

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