关于一对多的数据,统计信息绑定gridview的通常做法 比如一个订单表,有明细信息显示订单表的时候,想在gridview上有一列,显示有多少明细我的做法是对绑定实体增加一个只读属性,返回 明细集合的count的值。但是由于有很多这类很简单的只读属性,而且感觉这些似乎应该是UI层的工作,去不断的破坏实体好像不是很优雅,请大家说说都是如何处理的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有懂你这个count. 是每个商品的count 还是总商品的count.如果每个商品的count.给实体加个属性没啥。。 你这个COUNT 要从数据库返回。那么实体类中就应该定义一个M_count 显示订单的时候,表格还需要显示一列,就是这个订单有多少商品绑定的是对象数据源,虽然这个数据源有一个商品明细,但不能直接绑定,所以要在实体类上增加一个属性Count,返回商品明细的个数,但这样我觉得很不优雅,因为商品明细已经有集合在实体类上了,又多此一举的增加一个属性,仅仅是为了绑定。 就是说你的order类中有一个collection集合里面是商品明细那你绑定的时候前台就直接绑改订单的count就好了。比如有一个list<product> 属于order的一个属性 明细属于order表 那你绑定的时候 就绑定 list<product>.count但是这样前台视乎要麻烦些。。添加个属性 没有什么 要么你就 在定义的时候就加上count属性。查询的时候直接算出就是了。 实体层不一定非要全部都是表字段的映射,像做博客,有用到博客地址别名,文章别名等直接在在实体层加个属性 public string Url { get { if (!string.IsNullOrEmpty(A_ArticleName)) return A_ArticleName; else return A_ID.ToString(); } }这样判断。然后直接取你也可以不要显示丁单数量,点击详细然后查看该丁单订购的商品也可以啊! 假设你返回的是List<temp>集合用于UI显示则temp类你可添加一属性:public int Count{ get{return Details.Count();}}//商品明细public List<detail> Details{ get;set;} 就是这个意思前台绑定list<product>.count没办法实现,加个属性又有点浪费。而且如果统计的条件还有不同的话,就要加好几个属性了,没办法传参数 你绑定的时候不是绑定的实体吗 ?直接绑定 order.collection这个属性.count不就可以了么。。 怎么绑定?<%# Eval("collection.count")> ?这样不行的,字符串只能是属性吧 你还是照样在UI上面绑定数据,最后在UI上读你绑定COUNT的条数,注意是读UI,TABLE的,例如读标签个数,然后取COUNT count就可以统计数量了,我是想绑定而不想写代码 实体类中定义一个count属性,一个count()方法,属性的get方法中:count=count();count()方法得到汇总值,然后这个count属性供前台调用 不是统计总条数,而是每行都要统计,他是一对多的,如果不绑定,而是用代码,或者MVC模式,都是可以直接返回count的,但绑定只能绑定到属性,这样为了绑定,就要建立很多很简单的只读属性,不优雅 方法二:sql2005有个数据库函数是row_number(),在你查数据库的时候就使用,在你UI页面上直接就可以取得这个集合条数了 现在就是这样做的呀,count方法其实都有现成的,集合都是有count方法的,所以只要建一个count属性就可以了但这样前台一变化,就要改实体,目的只是显示,并不涉及业务,这样处理我不是很喜欢,并且如果count如果有条件的话,还要增加更多的属性,比如多表是人员表的话,要统计男生几个,女生几个,就要两个属性了,如果UI层能自己处理 count((p)=>p.sex=="男"),那就很舒服了 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; } } } 2颗星的 怎么还在用 gridview 这么 笨重的 控件. 居然还可以放条件 <%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductId==101)%>解决我的大问题了,哈哈,这个绑定怎么可以用方法了呢,第一次用,长见识了 有内部办公系统,用gridview 是一件很舒服的事情,对业务变化的跟进比什么速度效率都要重要 个人感觉用list.count, 当然可以用方法,要不固定长度显示多麻烦, 放条件做什么?GridView 直接绑定一个List<T>每一行list<T> 都有一个属于自己的count.如果要过滤的话过滤list<T>就可以了,不要在属性后面加条件 要出错。相当于绑定每个实体的一个属性。 没有出错呀,我试了这样如果商品有废弃的,就可以加条件过滤不是很好吗<%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductStatus =="Normal")%>为什么不建议用? 建议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这样得到的是一个类型的集合吧 visual 2005 突然不能运行网页了! div+html 动态图片的问题 本机SMTPServer发送邮件问题 100问个排序,查询分页的问题,帮顶有分! 关于一个很牛的SQL语句求教 各位大哥哥大姐姐,我打不开ASP.NET Web应用程序,请大家帮帮忙,谢谢了! 紧急求救.net的Oracle问题,高手进 谁能给个asp.net读取写入xml文件的代码?研究一下。小弟是初学者。 再再次提问! 单击LinkButton后,如何不刷新页面? 关于仿豆丁网的web在线阅读器部分、求教.. 每个新建页面都出错~
那你绑定的时候前台就直接绑改订单的count就好了。比如有一个list<product> 属于order的一个属性 明细属于order表 那你绑定的时候 就绑定 list<product>.count但是这样前台视乎要麻烦些。。添加个属性 没有什么 要么你就 在定义的时候就加上count属性。查询的时候直接算出就是了。
像做博客,有用到博客地址别名,文章别名等
直接在在实体层加个属性
public string Url
{
get {
if (!string.IsNullOrEmpty(A_ArticleName))
return A_ArticleName;
else
return A_ID.ToString();
}
}
这样判断。然后直接取
你也可以不要显示丁单数量,点击详细然后查看该丁单订购的商品也可以啊!
则temp类你可添加一属性:
public int Count
{
get{return Details.Count();}
}//商品明细
public List<detail> Details
{
get;set;
}
前台绑定list<product>.count没办法实现,加个属性又有点浪费。而且如果统计的条件还有不同的话,就要加好几个属性了,没办法传参数
order.collection这个属性.count不就可以了么。。
怎么绑定?<%# Eval("collection.count")> ?
这样不行的,字符串只能是属性吧
count就可以统计数量了,我是想绑定而不想写代码
count=count();
count()方法得到汇总值,然后这个count属性供前台调用
不是统计总条数,而是每行都要统计,他是一对多的,如果不绑定,而是用代码,或者MVC模式,都是可以直接返回count的,但绑定只能绑定到属性,这样为了绑定,就要建立很多很简单的只读属性,不优雅
前台
<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; }
}
}
<%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductId==101)%>解决我的大问题了,哈哈,这个绑定怎么可以用方法了呢,第一次用,长见识了
有内部办公系统,用gridview 是一件很舒服的事情,对业务变化的跟进比什么速度效率都要重要
这样如果商品有废弃的,就可以加条件过滤不是很好吗
<%# ((WebApplication15.OrderModel)Container.DataItem).Orderlist.Count((p)=> p.ProductStatus =="Normal")%>
为什么不建议用?
可以考虑传“断言”参数
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这样得到的是一个类型的集合吧