C# 是否在没有自定义类型的绑定字段上显示联接值?
我有一个绑定到C# 是否在没有自定义类型的绑定字段上显示联接值?,c#,asp.net,linq,C#,Asp.net,Linq,我有一个绑定到ICollection的GridView,它需要显示两列: <asp:GridView ID="UserAnswersGridView" runat="server"> <Columns> <asp:BoundField DataField="Question.Name" HeaderText="Question Name" SortExpression="QuestionID" /> <asp:
ICollection
的GridView,它需要显示两列:
<asp:GridView ID="UserAnswersGridView" runat="server">
<Columns>
<asp:BoundField DataField="Question.Name" HeaderText="Question Name" SortExpression="QuestionID" />
<asp:BoundField DataField="Score" HeaderText="Score" SortExpression="Score" />
</Columns>
</asp:GridView>
对不起,如果这个解释不是很清楚 我相信
GridView
只支持立即类型的属性。是中继器还是类似的选择?这给了你更多的灵活性
或者,可以通过分部类向类型添加垫片特性:
namespace YourLinqNamespace {
partial class UserAnswer {
public string QuestionName {get {return Question.Name;}}
}
}
您不能在筛选器(Where
等)中使用此选项,但您应该能够在返回的对象上使用它,而不会出现问题。请注意,您可能希望使用LoadWith
保存往返行程:
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<UserAnswer>(x=>x.Question);
database.LoadOptions = options;
DataLoadOptions=newdataloadoptions();
options.LoadWith(x=>x.Question);
database.LoadOptions=选项;
您还可以使用ItemDataBoundEvent在代码隐藏中设置字段。或者您可以使用匿名类型,这有点像Marc的shim属性概念,但您不会修改域模型
from u in database.UserAnswers
Where u.UserAssessmentId == userAssessmentId
select new { QuestionName=u.Question.Name,
Answer = u.Answer
//etc etc
};
正如Marc指出的,您不应该从方法返回匿名类型,我在手动绑定到数据源时使用了以下技巧:
myGrid.DataSource=来自u等
在我看来,使用我的第一个建议更好,并在item data bound事件中处理它。与Marc Gravell一样,我几乎总是为这些情况创建垫片属性。另一种选择是使用模板列而不是绑定列,但这实际上取决于您的情况:
<asp:TemplateField HeaderText="Question Name">
<ItemTemplate>
<%# Eval("Question.Name") %>
</ItemTemplate>
</asp:TemplateField>
我以前从未听说过“垫片属性”-非常好的垫片,通过,选择你自己的术语-我掷骰子-pCheers,没有意识到我可以这么做:)。除了你不能从GetUserAnswers返回anon类型(干净的)。你可以通过对象来实现,但这并不完美。哦,是的,这是一个很好的观点…我想当我绑定到网格的数据源时,我会做到这一点。。。
<asp:TemplateField HeaderText="Question Name">
<ItemTemplate>
<%# Eval("Question.Name") %>
</ItemTemplate>
</asp:TemplateField>