如果asp:DataGrid上的列表中有项目,如何显示“True”

时间:2015-07-15 14:48:44

标签: c# asp.net wpf datagrid

这是我的设置:

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列,但是对于这些数据我有点不确定。

3 个答案:

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