比如一个订单表,有明细信息显示订单表的时候,想在gridview上有一列,显示有多少明细我的做法是对绑定实体增加一个只读属性,返回 明细集合的count的值。但是由于有很多这类很简单的只读属性,而且感觉这些似乎应该是UI层的工作,去不断的破坏实体好像不是很优雅,请大家说说都是如何处理的?

解决方案 »

  1.   

    没有懂你这个count. 是每个商品的count 还是总商品的count.如果每个商品的count.给实体加个属性没啥。。
      

  2.   

    你这个COUNT 要从数据库返回。那么实体类中就应该定义一个M_count
      

  3.   

    显示订单的时候,表格还需要显示一列,就是这个订单有多少商品绑定的是对象数据源,虽然这个数据源有一个商品明细,但不能直接绑定,所以要在实体类上增加一个属性Count,返回商品明细的个数,但这样我觉得很不优雅,因为商品明细已经有集合在实体类上了,又多此一举的增加一个属性,仅仅是为了绑定。
      

  4.   

    就是说你的order类中有一个collection集合里面是商品明细
    那你绑定的时候前台就直接绑改订单的count就好了。比如有一个list<product> 属于order的一个属性 明细属于order表 那你绑定的时候  就绑定 list<product>.count但是这样前台视乎要麻烦些。。添加个属性 没有什么 要么你就 在定义的时候就加上count属性。查询的时候直接算出就是了。
      

  5.   

    实体层不一定非要全部都是表字段的映射,
    像做博客,有用到博客地址别名,文章别名等
    直接在在实体层加个属性
            
    public string Url
            {
                get {
                    if (!string.IsNullOrEmpty(A_ArticleName))
                        return A_ArticleName;
                    else
                        return A_ID.ToString();
                }
            }
    这样判断。然后直接取
    你也可以不要显示丁单数量,点击详细然后查看该丁单订购的商品也可以啊!
      

  6.   

    假设你返回的是List<temp>集合用于UI显示
    则temp类你可添加一属性:
    public int Count
    {
      get{return Details.Count();}
    }//商品明细
    public List<detail> Details
    {
     get;set;
    }
      

  7.   

    就是这个意思
    前台绑定list<product>.count没办法实现,加个属性又有点浪费。而且如果统计的条件还有不同的话,就要加好几个属性了,没办法传参数
      

  8.   

    你绑定的时候不是绑定的实体吗 ?直接绑定 
    order.collection这个属性.count不就可以了么。。
      

  9.   


    怎么绑定?<%# Eval("collection.count")> ?
    这样不行的,字符串只能是属性吧
      

  10.   

    你还是照样在UI上面绑定数据,最后在UI上读你绑定COUNT的条数,注意是读UI,TABLE的,例如读标签个数,然后取COUNT
      

  11.   


    count就可以统计数量了,我是想绑定而不想写代码
      

  12.   

    实体类中定义一个count属性,一个count()方法,属性的get方法中:
    count=count();
    count()方法得到汇总值,然后这个count属性供前台调用
      

  13.   


    不是统计总条数,而是每行都要统计,他是一对多的,如果不绑定,而是用代码,或者MVC模式,都是可以直接返回count的,但绑定只能绑定到属性,这样为了绑定,就要建立很多很简单的只读属性,不优雅
      

  14.   

    方法二:sql2005有个数据库函数是row_number(),在你查数据库的时候就使用,在你UI页面上直接就可以取得这个集合条数了
      

  15.   

    现在就是这样做的呀,count方法其实都有现成的,集合都是有count方法的,所以只要建一个count属性就可以了但这样前台一变化,就要改实体,目的只是显示,并不涉及业务,这样处理我不是很喜欢,并且如果count如果有条件的话,还要增加更多的属性,比如多表是人员表的话,要统计男生几个,女生几个,就要两个属性了,如果UI层能自己处理 count((p)=>p.sex=="男"),那就很舒服了
      

  16.   

    DEMO
    前台
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:TemplateField>
        <ItemTemplate>
        <%# ((CSDNSolution_One.OrderModel)Container.DataItem).Orderlist.Count %>
        </ItemTemplate>
        </asp:TemplateField>
        </Columns>
        </asp:GridView>
        </form>后台public partial class String_Test : System.Web.UI.Page
        {
            OrderModel Order = null;
            List<OrderModel> lt = new List<OrderModel>();
            protected void Page_Load(object sender, EventArgs e)
            {
                Order = new OrderModel()
               {
                   OrderId = 1,
                   OrderName = "OrderOne",
                   Orderlist = new List<ProductModel> { 
                    new ProductModel(){ ProductId=101,Productname="101Name"},
                    new ProductModel(){ ProductId=102,Productname="102Name"}
                    }
               };            lt.Add(Order);
                this.GridView1.DataSource = lt;
                this.GridView1.DataBind();        }
        }
        public class OrderModel
        {
            public OrderModel()
            {
            }
            private int _orderId;        public int OrderId
            {
                get { return _orderId; }
                set { _orderId = value; }
            }
            private string _orderName;        public string OrderName
            {
                get { return _orderName; }
                set { _orderName = value; }
            }
            private List<ProductModel> _orderlist;        public List<ProductModel> Orderlist
            {
                get { return _orderlist; }
                set { _orderlist = value; }
            }
        }
        public class ProductModel
        {
            public ProductModel()
            {        }
            private int _productId;        public int ProductId
            {
                get { return _productId; }
                set { _productId = value; }
            }
            private string _productname;        public string Productname
            {
                get { return _productname; }
                set { _productname = value; }
            }
        }
      

  17.   

    2颗星的 怎么还在用 gridview 这么 笨重的 控件.
      

  18.   

    居然还可以放条件
        <%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductId==101)%>解决我的大问题了,哈哈,这个绑定怎么可以用方法了呢,第一次用,长见识了
      

  19.   


    有内部办公系统,用gridview 是一件很舒服的事情,对业务变化的跟进比什么速度效率都要重要
      

  20.   

    个人感觉用list.count,  当然可以用方法,要不固定长度显示多麻烦,
      

  21.   

    放条件做什么?GridView 直接绑定一个List<T>每一行list<T> 都有一个属于自己的count.如果要过滤的话过滤list<T>就可以了,不要在属性后面加条件 要出错。相当于绑定每个实体的一个属性。
      

  22.   

    没有出错呀,我试了
    这样如果商品有废弃的,就可以加条件过滤不是很好吗
    <%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductStatus =="Normal")%>
    为什么不建议用?
      

  23.   

    建议LZ不要用反射,GridView已经很笨重了..
    可以考虑传“断言”参数
    public int Count(Func<menu, bool> func)
    {
        get 
           { 
               return func == null 
                      ? Details.Count()
                      : Details.Count(func);
           }
    }
    public List<detail> Details
    {
     get;set;
    }
    ((WebApplication15.OrderModel)Container.DataItem).Orderlist这样得到的是一个类型的集合吧