private void btnSearch_Click(object sender, RoutedEventArgs e) { RadGridView1.ItemsSource = null; while (RadGridView1.Columns.Count > 5) { RadGridView1.Columns.RemoveAt(5); } var data = _dataContext.GetSubordinateOrderDistribution(); bool showAll = rbAllOrder.IsChecked.Value; if (!showAll) { data.RemoveAll(o => o.QuaDelivered == o.Quantity); } DataTable table = new DataTable(); table.Columns.Add(new DataColumn("ProductCode", typeof(string))); table.Columns.Add(new DataColumn("BrandCode", typeof(string))); table.Columns.Add(new DataColumn("StyleCode", typeof(string))); table.Columns.Add(new DataColumn("ColorCode", typeof(string))); table.Columns.Add(new DataColumn("SizeName", typeof(string))); var onames = data.Select(o => o.OrganizationName).Distinct().ToList(); onames.Add("合计"); foreach (var on in onames) { table.Columns.Add(new DataColumn(on, typeof(int))); table.Columns.Add(new DataColumn("delivered" + on, typeof(int))); table.Columns.Add(new DataColumn("all" + on, typeof(int))); //RadGridView1.Columns.Add(new telerik::GridViewDataColumn() { Header = on, Name = on, DataMemberBinding = new Binding(on) }); var col = new telerik::GridViewDataColumn() { Header = on, Name = on, DataMemberBinding = new Binding(on) }; col.AggregateFunctions.Add(new SumFunction { ResultFormatString = "{0}件", SourceField = on, SourceFieldType = typeof(int?) }); //内存中动态生成一个XAML,描述了一个DataTemplate XNamespace ns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; XElement xGrid = new XElement(ns + "Grid", new XElement(ns + "Grid.ColumnDefinitions", new XElement(ns + "ColumnDefinition", new XAttribute("Width", "Auto")), new XElement(ns + "ColumnDefinition", new XAttribute("Width", "Auto")))); xGrid.Add(new XElement(ns + "TextBlock", new XAttribute("Text", "{Binding Path=" + on + "}"), new XAttribute("Margin", "0 0 5 0"))); if (showAll) { xGrid.Add( new XElement(ns + "TextBlock", new XAttribute("Foreground", "Red"), new XAttribute("Text", "{Binding Path=" + "delivered" + on + "}"), new XAttribute("FontSize", "8"), new XAttribute("Grid.Column", "1"))); } else { xGrid.Add( new XElement(ns + "TextBlock", new XAttribute("Foreground", "Red"), new XAttribute("FontSize", "8"), new XAttribute("Grid.Column", "1"), new XElement(ns + "TextBlock", new XAttribute("Text", "{Binding Path=" + "all" + on + "}")), new XElement(ns + "TextBlock", new XAttribute("Text", "-")), new XElement(ns + "TextBlock", new XAttribute("Text", "{Binding Path=" + "delivered" + on + "}")))); } XElement xDataTemplate = new XElement(ns + "DataTemplate", new XAttribute("xmlns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation")); xDataTemplate.Add(xGrid); XmlReader xr = xDataTemplate.CreateReader(); DataTemplate dataTemplate = XamlReader.Load(xr) as DataTemplate; col.CellTemplate = dataTemplate; RadGridView1.Columns.Add(col); } var ps = data.OrderBy(o => o.ProductCode).Select(o => o.ProductID).Distinct(); foreach (var p in ps) { var d = data.First(o => o.ProductID == p); DataRow row = table.NewRow(); table.Rows.Add(row); row["ProductCode"] = d.ProductCode; row["BrandCode"] = d.BrandCode; row["StyleCode"] = d.StyleCode; row["ColorCode"] = d.ColorCode; row["SizeName"] = d.SizeName; foreach (var on in onames) { if (on == "合计") { var totalData = data.Where(o => o.ProductID == p); var quantity = totalData.Sum(o => o.Quantity); var quaDelivered = totalData.Sum(o => o.QuaDelivered); row[on] = showAll ? quantity : (quantity - quaDelivered); row["all" + on] = quantity; row["delivered" + on] = quaDelivered; continue; } d = data.Find(o => o.ProductID == p && o.OrganizationName == on); if (d != null) { row[on] = showAll ? d.Quantity : (d.Quantity - d.QuaDelivered); row["all" + on] = d.Quantity; row["delivered" + on] = d.QuaDelivered; } } } RadGridView1.ItemsSource = table.DefaultView;//坑爹的DefaultView,如果直接用DataTable那么CellTemplate的Binding就有问题,无法绑定,不知是微软还是Telerik搞的鬼 }
private void btnSearch_Click(object sender, RoutedEventArgs e) { RadGridView1.ItemsSource = null; while (RadGridView1.Columns.Count > 5) { RadGridView1.Columns.RemoveAt(5); } var data = ReportDataContext.AggregateStoreMove(billFilter.FilterDescriptors); DataTable table = new DataTable(); table.Columns.Add(new DataColumn("ProductCode", typeof(string))); table.Columns.Add(new DataColumn("BrandCode", typeof(string))); table.Columns.Add(new DataColumn("StyleCode", typeof(string))); table.Columns.Add(new DataColumn("ColorCode", typeof(string))); table.Columns.Add(new DataColumn("SizeName", typeof(string))); var snames = ReportDataContext.Storages.Select(o => o.Name).ToList(); foreach (var sn in snames) { table.Columns.Add(new DataColumn(sn, typeof(int))); table.Columns.Add(new DataColumn("movein" + sn, typeof(int))); var col = new telerik::GridViewDataColumn() { Header = sn, UniqueName = sn, DataMemberBinding = new Binding(sn) }; col.AggregateFunctions.Add(new StoreMoveTotalFunction(sn) { Caption = "出入合计:", ResultFormatString = "{0}" }); //内存中动态生成一个XAML,描述了一个DataTemplate XNamespace ns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; XElement xGrid = new XElement(ns + "Grid"); xGrid.Add( new XElement(ns + "TextBlock", new XElement(ns + "TextBlock", new XAttribute("Text", "{Binding Path=" + sn + "}")), new XElement(ns + "TextBlock", new XAttribute("Text", " - "), new XAttribute("Foreground", "Red")), new XElement(ns + "TextBlock", new XAttribute("Text", "{Binding Path=" + "movein" + sn + "}")))); XElement xDataTemplate = new XElement(ns + "DataTemplate", new XAttribute("xmlns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation")); xDataTemplate.Add(xGrid); XmlReader xr = xDataTemplate.CreateReader(); DataTemplate dataTemplate = XamlReader.Load(xr) as DataTemplate; col.CellTemplate = dataTemplate; RadGridView1.Columns.Add(col); } var ps = data.OrderBy(o => o.ProductCode).Select(o => o.ProductID).Distinct(); foreach (var p in ps) { var d = data.First(o => o.ProductID == p); DataRow row = table.NewRow(); table.Rows.Add(row); row["ProductCode"] = d.ProductCode; row["BrandCode"] = d.BrandCode; row["StyleCode"] = d.StyleCode; row["ColorCode"] = d.ColorCode; row["SizeName"] = d.SizeName; foreach (var sn in snames) { var ds = data.FindAll(o => o.ProductID == p && o.OutStorageName == sn); if (ds != null && ds.Count > 0) { row[sn] = ds.Sum(o => o.Quantity); } else { row[sn] = 0; } ds = data.FindAll(o => o.ProductID == p && o.InStorageName == sn); if (ds != null && ds.Count > 0) { row["movein" + sn] = ds.Sum(o => o.Quantity); } else { row["movein" + sn] = 0; } } } RadGridView1.ItemsSource = table.DefaultView; }
private void btnSearch_Click(object sender, RoutedEventArgs e) { RadGridView1.ItemsSource = null;//将数据源设为null,否则在下面更改列表结构时将报错 while (RadGridView1.Columns.Count > 5) { RadGridView1.Columns.RemoveAt(5); } var data = _dataContext.Search(); DataTable table = new DataTable(); table.Columns.Add(new DataColumn("ProductCode", typeof(string))); table.Columns.Add(new DataColumn("BrandCode", typeof(string))); table.Columns.Add(new DataColumn("StyleCode", typeof(string))); table.Columns.Add(new DataColumn("ColorCode", typeof(string))); table.Columns.Add(new DataColumn("SizeName", typeof(string))); var onames = data.Select(o => o.OrganizationName).Distinct().ToList(); onames.Add("合计"); foreach (var on in onames) { table.Columns.Add(new DataColumn(on, typeof(int))); var col = new telerik::GridViewDataColumn() { Header = on, UniqueName = on, DataMemberBinding = new Binding(on) }; col.AggregateFunctions.Add(new SumFunction { ResultFormatString = "{0}件", SourceField = on, SourceFieldType = typeof(int?) }); RadGridView1.Columns.Add(col); } var ps = data.OrderBy(o => o.ProductCode).Select(o => o.ProductID).Distinct(); foreach (var p in ps) { var d = data.First(o => o.ProductID == p); DataRow row = table.NewRow(); table.Rows.Add(row); row["ProductCode"] = d.ProductCode; row["BrandCode"] = d.BrandCode; row["StyleCode"] = d.StyleCode; row["ColorCode"] = d.ColorCode; row["SizeName"] = d.SizeName; foreach (var on in onames) { if (on == "合计") { row[on] = data.Where(o => o.ProductID == p).Sum(o => o.Quantity); continue; } var stock = data.FirstOrDefault(o => o.ProductID == p && o.OrganizationName == on); if (stock != null) { row[on] = stock.Quantity; } else { row[on] = 0; } } } RadGridView1.ItemsSource = table.DefaultView; }