Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net-绑定到linq数据源并添加外部列_C#_Asp.net_Linq To Sql - Fatal编程技术网

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

C# asp.net-绑定到linq数据源并添加外部列,c#,asp.net,linq-to-sql,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

我有一个显示网格的数据绑定控件。网格绑定到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;
既然它根本不在支付数据库中,我怎么能把它作为一个字段添加到网格中呢?

试试这个:

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
而不是
数据。激活
会将外部列添加到网格中

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

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

您可以编写扩展方法并在选择中使用它。检查这个

private Func GetUserEmail(字符串用户名)
{
returnsystem.Web.Security.Membership.GetUser(username).Email;
}
PaymentsDataContext数据=新的PaymentsDataContext();
var q=来自data.activations中的act
批准法案的地方!=真的
orderby act.activationDate升序
选择新建{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)};

您使用的网格组件是什么?有些人可以添加计算列,而不必将它们放在绑定数据源中。这是jqGrid的asp.net包装器。我希望你是对的,但不是。我得到了一个空对象引用异常。如果不保证act.userName通过GetUser返回电子邮件地址,则可能发生这种情况。。。我需要考虑一下……这是保证。在DB本身和DAL中,用户名和电子邮件地址均为“非空”。即使这句话不是真的,我也检查了当前表,每个用户都有一个电子邮件地址。谢谢。这可能行得通,但我得说,这条线让我头晕目眩。我不太了解林克,我也不知道他们在干什么。你能给我指一个具体的答案或答案的一部分吗。
 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)};