这是我的设置:
public class A
{
string FirstName{get;set;}
string LastName{get;set;}
List<Object> MyItems{get;set;}
}
我的aspx页面设置:
<asp:DataGrid AutoGenerateColumns="false" runat="server" ID="dgMyData" CellPadding="7">
<Columns>
<asp:BoundColumn DataField="Subject" HeaderText="Subject" />
<asp:BoundColumn DataField="EntryDate" HeaderText="Entry Date" />
</Columns>
</asp:DataGrid>
我的问题:
假设我使用A类(或List myList)作为数据源, 如果MyItems列表中有项目,我想在此添加另一列来说“是”或“真”。我不需要在此页面上显示项目,但我需要指出它们是否存在。
我该怎么做呢?我查看了itemtemplate列,但是对于这些数据我有点不确定。
答案 0 :(得分:1)
我不确定这是否有助于您/如果我理解问题,但创建新列并将其绑定到
(MyItems.Any()).toString()
帮助你?
你也可以
MyItems.Any() ? "items exist" : "no items"
最简单的解决方案是添加一个新属性来保存要显示的文本字符串,如下所示:
public class A
{
string FirstName{get;set;}
string LastName{get;set;}
List<Object> MyItems{get;set;}
string Info {get { return MyItems.Count > 0 ? "items exist" : "no items"; }}
}
并向添加
的模板添加新列<asp:BoundColumn DataField="Info" HeaderText="Items Exist ?" />
如果您不想更改对象类,请尝试使用模板列,例如:
<asp:TemplateColumn HeaderText="Items Exist ?">
<ItemTemplate>
<%#(Container.DataItem("MyItems") as IEnumerable<object>).Any()%>
</ItemTemplate>
</asp:TemplateColumn>
答案 1 :(得分:1)
如果您在新页面上使用它,那么最好使用asp GridView而不是DataGrid。 GridView是Data Grid的后续产品,具有更大的灵活性。
DataGrid是一个ASP.NET 1.1控件。 GridView在2.0中。有关比较的更多信息,请阅读https://msdn.microsoft.com/en-us/library/05yye6k9%28v=vs.100%29.aspx
答案 2 :(得分:0)
所以建议的答案(以及我试图避免的答案)是在我的对象类中添加另一个变量。
由于这个类在很多地方使用并且我不想添加对象,所以我能够通过ItemTemplate确定一种解决方法:
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label Text='<%# Int32.Parse(DataBinder.Eval(Container.DataItem, "Files.Count").ToString()) > 0 ? "Yes" : "No" %>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>