C# asp.net-绑定到linq数据源并添加外部列
我有一个显示网格的数据绑定控件。网格绑定到linq到sql数据源。我使用以下代码: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
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 };
因为您已经在binq
而不是数据。激活
会将外部列添加到网格中
编辑:
由于新添加的列,栅格视图的模板必须有一个位置
要接受它,您可以手动添加它,如:
<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)};