private void OnRoomReceive(List <Room> rooms) { for (var rowIndex = 0; rowIndex < grid.rows.Count; rowIndex++) { var row = grid.rows[rowIndex]; var performer = (PerformerStatEx)row.ValueObject; performer.Rooms = string.Join(", ", rooms.Where(r => r.Owner == performer.UserId).Select(r => r.Name)); grid.UpdateRow(rowIndex, performer); } var blank = new PerformerStatEx(); var roomsColumnIndex = grid.Columns.FindIndex(col => col.PropertyName == blank.Property(p => p.Rooms)); grid.InvalidateColumns(roomsColumnIndex, roomsColumnIndex); chat.RoomsReceived -= RoomsReceived; }
public void SetupGrid() { var stat = new PerformerStatEx(); try { var metadataSettings = TradeSharpDictionary.Instance.proxy.GetMetadataByCategory("UserInfoEx"); if (metadataSettings != null) { imgListAvatar.ImageSize = new Size((int)metadataSettings["SmallAvatarMaxSize"], (int)metadataSettings["SmallAvatarMaxSize"]); } } catch (Exception ex) { Logger.Info("PerformersFastGrid.SetupGrid", ex); } try { grid.Columns.Clear(); var cols = LoadColumns(); var fontBold = new Font(Font, FontStyle.Bold); foreach (var col in cols) { var column = new FastColumn(col.PropertyName, col.Title) { FormatString = col.FormatString //ColumnMinWidth = 65 }; if (!string.IsNullOrEmpty(col.FormatSuffix)) { column.Tag = col.FormatSuffix; column.CellFormatting += args => { args.resultedString += (string)column.Tag; }; } // определенные колонки имеют определенные настройки if (col.PropertyName == stat.Property(t => t.IsSubscribed)) { column.IsHyperlinkStyleColumn = true; column.HyperlinkActiveCursor = Cursors.Hand; column.ImageList = imageListGrid; } else if (col.PropertyName == stat.Property(t => t.TradeSignalTitle) || col.PropertyName == stat.Property(t => t.Login)) { if (col.PropertyName == stat.Property(t => t.TradeSignalTitle)) { column.ColumnMinWidth = 70; } column.IsHyperlinkStyleColumn = true; column.HyperlinkActiveCursor = Cursors.Hand; column.ColorHyperlinkTextActive = Color.Blue; column.HyperlinkFontActive = fontBold; column.ShowClippedContent = true; } else if (col.PropertyName == stat.Property(t => t.ChartIndex)) { column.ColumnWidth = imgListChartMini.ImageSize.Width + grid.CellPadding * 2; column.ImageList = imgListChartMini; column.IsHyperlinkStyleColumn = true; column.HyperlinkActiveCursor = Cursors.Hand; } else if (col.PropertyName == stat.Property(t => t.UserScore)) { column.IsHyperlinkStyleColumn = true; column.HyperlinkActiveCursor = Cursors.Hand; column.ColorHyperlinkTextActive = Color.Blue; column.HyperlinkFontActive = fontBold; } else if (col.PropertyName == stat.Property(t => t.IsRealAccount)) { column.ImageList = imageListGrid; } else if (col.PropertyName == stat.Property(t => t.AvatarSmallIndex)) { column.ImageList = imgListAvatar; column.ColumnWidth = imgListAvatar.ImageSize.Width + grid.CellPadding * 2; } else if (col.PropertyName == stat.Property(t => t.Rooms)) { column.IsHyperlinkStyleColumn = true; column.HyperlinkActiveCursor = Cursors.Hand; column.ColorHyperlinkTextActive = Color.Blue; column.HyperlinkFontActive = fontBold; } column.Visible = true; grid.Columns.Add(column); } // установка минимальных размеров таблицы (а зачем?) //grid.CalcSetTableMinWidth(); grid.DataBind(grid.rows.Select(r => r.ValueObject).ToList()); grid.CheckSize(true); } // ReSharper disable EmptyGeneralCatchClause catch // ReSharper restore EmptyGeneralCatchClause { // мб в режиме дизайнера, о чем контрол никогда не узнает } }
public void DataBind(List <PerformerStatEx> performerStats, ChatControlBackEnd chat) { var images = imgListChartMini.Images.Cast <Image>().ToList(); imgListChartMini.Images.Clear(); foreach (var img in images) { img.Dispose(); } var data = new List <PerformerStatEx>(); // UserScore вычисляется на сервере // RecalcUserScore(performerStats); var userInfoExSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy); var usersInfoEx = userInfoExSource.GetUsersInfo(performerStats.Select(p => p.UserId).Distinct().ToList()); var rowColors = new[] { Color.Red, Color.ForestGreen, Color.Black }; var stringFormat = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center }; using (var font = new Font(Font.FontFamily, 7)) foreach (var performerStat in performerStats) { // создать картинку с графиком var bmp = new Bitmap(imgListChartMini.ImageSize.Width, imgListChartMini.ImageSize.Height); if (performerStat.Chart != null) { using (var gr = Graphics.FromImage(bmp)) { var leftValue = performerStat.AvgYearProfit; var leftText = string.Format("{0:f2}%", leftValue); var leftTextWidth = gr.MeasureString(leftText, font).ToSize().Width; var rightValue = performerStat.ProfitLastMonthsAbs; var rightText = rightValue.ToStringUniformMoneyFormat(false); var textWidth = leftTextWidth + gr.MeasureString(rightText, font).ToSize().Width; if (!ShowLabelsInMiniChart) { textWidth = 0; } PointF[] points; if (ChartBrush != null) { points = MiniChartPacker.MakePolygon(performerStat.Chart, imgListChartMini.ImageSize.Width - textWidth, imgListChartMini.ImageSize.Height, 1, 1); } else { points = MiniChartPacker.MakePolyline(performerStat.Chart, imgListChartMini.ImageSize.Width - textWidth, imgListChartMini.ImageSize.Height, 1, 1); } gr.SmoothingMode = SmoothingMode.AntiAlias; gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; if (ShowLabelsInMiniChart) { for (var i = 0; i < points.Length; i++) { points[i] = new PointF(points[i].X + leftTextWidth, points[i].Y); } gr.DrawString(leftText, font, new SolidBrush(leftValue >= 0 ? rowColors[1] : rowColors[0]), 0, imgListChartMini.ImageSize.Height / 2, stringFormat); gr.DrawString(rightText, font, new SolidBrush(rightValue >= 0 ? rowColors[1] : rowColors[0]), imgListChartMini.ImageSize.Width - textWidth + leftTextWidth, imgListChartMini.ImageSize.Height / 2, stringFormat); } if (ChartBrush != null) { gr.FillPolygon(ChartBrush, points); } else { gr.DrawLines(ChartPen ?? new Pen(leftValue >= 0 ? rowColors[1] : rowColors[0], 2), points); } } } var item = new PerformerStatEx(performerStat) { ChartIndex = imgListChartMini.Images.Count }; imgListChartMini.Images.Add(bmp); imgListChartMini.Images.SetKeyName(item.ChartIndex, item.ChartIndex.ToString()); // создать фотку UserInfoEx userInfoEx = null; if (usersInfoEx != null) { userInfoEx = usersInfoEx.Find(ui => ui != null && ui.Id == performerStat.UserId); } if (userInfoEx != null && userInfoEx.AvatarSmall != null) { item.AvatarSmallIndex = imgListAvatar.Images.Count; imgListAvatar.Images.Add(userInfoEx.AvatarSmall); imgListAvatar.Images.SetKeyName(item.AvatarSmallIndex, item.AvatarSmallIndex.ToString()); } else { item.AvatarSmallIndex = -1; } data.Add(item); } grid.DataBind(data); grid.Invalidate(); if (this.chat != null) { this.chat.RoomsReceived -= RoomsReceived; } this.chat = chat; if (chat == null) { return; } chat.RoomsReceived += RoomsReceived; chat.GetRooms(); }
private void SetupGrids() { var blank = new PerformerStatEx(); // участники performersFastGrid.LoadPerformersGridSelectedColumns += () => new List <string> { blank.Property(p => p.ChartIndex), blank.Property(p => p.TradeSignalTitle), blank.Property(p => p.Profit), blank.Property(p => p.SumProfitPoints), blank.Property(p => p.ProfitLastMonthsAbs), }; performersFastGrid.SetupGrid(); // переименовываем и задаем подходящее форматирование var colTradeSignalTitle = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.TradeSignalTitle)); if (colTradeSignalTitle != null) { colTradeSignalTitle.Title = Localizer.GetString("TitleTrader"); colTradeSignalTitle.ShowClippedContent = true; } var column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.Profit)); if (column != null) { column.Title = "%"; column.cellFormatting = null; // отменяем дополнение цифр единицами измерения, которые выполняется в PerformersFastGrid column.colorColumnFormatter = DigitColorColumnFormatter; } column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.SumProfitPoints)); if (column != null) { column.Title = Localizer.GetString("TitlePointsUnits"); column.cellFormatting = null; column.colorColumnFormatter = DigitColorColumnFormatter; } column = performersFastGrid.Grid.Columns.FirstOrDefault(c => c.PropertyName == blank.Property(p => p.ProfitLastMonthsAbs)); if (column != null) { column.Title = "$"; column.cellFormatting = null; column.FormatString = "f0"; column.colorColumnFormatter = DigitColorColumnFormatter; } performersFastGrid.Grid.CheckSize(true); // статистика statisticsFastGrid.SelectEnabled = false; statisticsFastGrid.Columns.Add(new FastColumn("a", Localizer.GetString("TitleStatisticsIndex")) { ShowClippedContent = true, }); statisticsFastGrid.Columns.Add(new FastColumn("b", " ") { ColumnWidth = 50, colorColumnFormatter = DigitColorColumnFormatter }); // таблицы с позициями PerformerStatistic.SetupDealsGrid(openedOrdersFastGrid, false); PerformerStatistic.SetupDealsGrid(closedOrdersFastGrid, true); // суммарная статистика var blankSummaryStatItem = new SummaryStatItem(string.Empty, Color.Empty); gridSummaryStat.Columns.Add(new FastColumn(blankSummaryStatItem.Property(p => p.ValueString), Localizer.GetString("TitleValue"))); gridSummaryStat.colorFormatter = (object value, out Color? color, out Color? fontColor) => { color = null; var rowData = (SummaryStatItem)value; fontColor = rowData.RowColor; }; gridSummaryStat.UserDrawCellText += PerformerStatistic.GridSummaryStatUserDrawCellText; }