【问题标题】:How to display "True" if there are items in a list on an asp:DataGrid如果asp上的列表中有项目,如何显示“True”:DataGrid
【发布时间】:2015-10-04 16:32:19
【问题描述】:

这是我的设置:

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 列,但有点不确定如何处理这些数据。

【问题讨论】:

    标签: c# asp.net wpf datagrid


    【解决方案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>
    

    【讨论】:

    • @Andre:对,你的确实更优雅。谢谢
    • @oppassum:你的网格应该显示什么? A 对象的列表?
    • @Veverke 如我的问题所述,如果列表中有项目,我想显示“是”或“真”。
    • 不确定我刚刚添加了什么作品,还没有测试过。
    【解决方案2】:

    如果您在新页面上使用它,那么最好使用 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

    【讨论】:

    • 谢谢!我以为有一个我只是没看过的继任者
    【解决方案3】:

    所以建议的答案(也是我试图避免的)是向我的对象类添加另一个变量。

    由于这个类在很多地方使用,我不想添加对象,所以我能够确定使用 ItemTemplate 解决这个问题的方法:

        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:Label Text='<%# Int32.Parse(DataBinder.Eval(Container.DataItem, "Files.Count").ToString()) > 0 ? "Yes" : "No" %>' runat="server" />
            </ItemTemplate>
        </asp:TemplateColumn>
    

    【讨论】:

    • 是的,我也刚刚添加了一个模板列。但不使用 Eval
    猜你喜欢
    • 2015-07-27
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多