2011-07-21 6 views
3

グリッドを表示するデータバインドコントロールがあります。グリッドはlinq to sqlデータソースにバインドされています。私は次のコードを使用します:asp.net - linqのデータソースにバインドし、外部の列を追加

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

グリッドに別の列を追加します。私はユーザーの電子メールアドレスを表示したい。 私はそうのようにそれを得る:それはすべての支払DBではありませんので、

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

は、どのように私は、グリッド内のフィールドとしてこれを追加することができますか?すでにビンqなくdata.activationsこれは、グリッドに外部の列を追加しますので、

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

+0

どのグリッドコンポーネントを使用していますか?いくつかは、バインドされたデータソース内にない計算カラムを追加する機能を持っています。 – Yuck

+0

jqGridのasp.netラッパーです。 –

答えて

2

はこれを試してみてください。

編集:

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

またはAutoGenerateColumnsという名前のGridViewのプロパティを設定します。 グリッドビューのテンプレートは、それを受け入れる場所 を持っている必要があり、新規追加された列のので、あなたは次のように手動で追加することができますto true

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

私はあなたが正しかったと思った。 nullのオブジェクト参照例外が発生します。 –

+0

act.userNameがGetUser経由でeMail-Adressを返そうとしていない場合は、これが起こる可能性があります。これについて少し考えてみる必要があります。 – Yahia

+0

これは保証されています。ユーザー名と電子メールアドレスは、DB自体とDALの両方で「Not NULL」です。たとえその文が本当に真実ではなかったとしても、私は現在の表をチェックし、すべてのユーザーは電子メールアドレスを持っています。 –

0

あなたはExtensionメソッドを作成して、それを選択に使用できます。これをチェックしてください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)}; 
+0

これはうまくいくかもしれませんが、私はそのスレッドで頭の中にいると言わなければなりません。私はlinqについてよく知らないし、彼らについて何が起こっているのか分からない。あなたが私に特定の答えや答えの一部を指すことができれば、 –

関連する問題