SeriesEditorControl.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using FastReport.DataVisualization.Charting;
  9. using FastReport.Utils;
  10. using FastReport.Data;
  11. namespace FastReport.MSChart
  12. {
  13. internal partial class SeriesEditorControl : UserControl
  14. {
  15. private MSChartSeries series;
  16. private bool updating;
  17. public event EventHandler Changed;
  18. public MSChartSeries Series
  19. {
  20. get { return series; }
  21. set
  22. {
  23. series = value;
  24. UpdateControls();
  25. }
  26. }
  27. public int ActivePageIndex
  28. {
  29. get { return pageControl2.ActivePageIndex; }
  30. set { pageControl2.ActivePageIndex = value; }
  31. }
  32. private Series ChartSeries
  33. {
  34. get { return series.SeriesSettings; }
  35. }
  36. private Report Report
  37. {
  38. get { return series.Report; }
  39. }
  40. private MSChartObject Chart
  41. {
  42. get { return Series.Parent as MSChartObject; }
  43. }
  44. private void UpdateControls()
  45. {
  46. updating = true;
  47. #region Data tab
  48. // name
  49. tbName.Text = ChartSeries.Name;
  50. // data panel
  51. int yValues = ChartSeries.YValuesPerPoint;
  52. string[] yValuesNames = Helper.GetYValuesNames(ChartSeries.ChartType);
  53. bool valueVisible = false;
  54. cbxXValue.Report = Report;
  55. cbxXValue.DataSource = Chart.DataSource;
  56. cbxXValue.Text = Series.XValue;
  57. cbxYValue1.Report = Report;
  58. cbxYValue1.DataSource = Chart.DataSource;
  59. cbxYValue1.Text = Series.YValue1;
  60. lblYValue1.Text = yValuesNames[0];
  61. cbxYValue2.Report = Report;
  62. cbxYValue2.DataSource = Chart.DataSource;
  63. cbxYValue2.Text = Series.YValue2;
  64. valueVisible = yValues > 1;
  65. cbxYValue2.Visible = valueVisible;
  66. lblYValue2.Visible = valueVisible;
  67. if (valueVisible)
  68. lblYValue2.Text = yValuesNames[1];
  69. cbxYValue3.Report = Report;
  70. cbxYValue3.DataSource = Chart.DataSource;
  71. cbxYValue3.Text = Series.YValue3;
  72. valueVisible = yValues > 2;
  73. cbxYValue3.Visible = valueVisible;
  74. lblYValue3.Visible = valueVisible;
  75. if (valueVisible)
  76. lblYValue3.Text = yValuesNames[2];
  77. cbxYValue4.Report = Report;
  78. cbxYValue4.DataSource = Chart.DataSource;
  79. cbxYValue4.Text = Series.YValue4;
  80. valueVisible = yValues > 3;
  81. cbxYValue4.Visible = valueVisible;
  82. lblYValue4.Visible = valueVisible;
  83. if (valueVisible)
  84. lblYValue4.Text = yValuesNames[3];
  85. pnData.Height = cbxYValue1.Top * (yValues + 1);
  86. pnOtherData.Location = new Point(pnData.Left, pnData.Bottom);
  87. // other data panel
  88. cbxColor.Report = Report;
  89. cbxColor.DataSource = Chart.DataSource;
  90. cbxColor.Text = Series.Color;
  91. tbFilter.Text = Series.Filter;
  92. cbxXValueType.SelectedIndex = (int)ChartSeries.XValueType;
  93. cbxYValueType.SelectedIndex = (int)ChartSeries.YValueType;
  94. cbxXAxisType.SelectedIndex = (int)ChartSeries.XAxisType;
  95. cbxYAxisType.SelectedIndex = (int)ChartSeries.YAxisType;
  96. // autoseries
  97. cbxAutoSeriesData.Report = Report;
  98. cbxAutoSeriesData.Text = Series.AutoSeriesColumn;
  99. cbAutoSeriesForce.Enabled = Chart.AutoSeriesForce;
  100. cbAutoSeriesForce.Checked = Series.AutoSeriesForce;
  101. cbxAutoSeriesData.DataSource = Chart.DataSource;
  102. cbxAutoSeriesData.Enabled = Chart.AutoSeriesForce;
  103. #endregion
  104. #region Values tab
  105. colX.HeaderText = lblXValue.Text;
  106. colY1.HeaderText = yValuesNames[0];
  107. colY2.Visible = yValues > 1;
  108. if (colY2.Visible)
  109. colY2.HeaderText = yValuesNames[1];
  110. colY3.Visible = yValues > 2;
  111. if (colY3.Visible)
  112. colY3.HeaderText = yValuesNames[2];
  113. colY4.Visible = yValues > 3;
  114. if (colY4.Visible)
  115. colY4.HeaderText = yValuesNames[3];
  116. gvValues.Rows.Clear();
  117. foreach (DataPoint point in ChartSeries.Points)
  118. {
  119. object[] values = new object[yValues + 1];
  120. values[0] = point.AxisLabel;
  121. if (String.IsNullOrEmpty(point.AxisLabel))
  122. values[0] = point.XValue;
  123. for (int i = 0; i < yValues; i++)
  124. {
  125. values[i + 1] = point.YValues[i];
  126. }
  127. gvValues.Rows.Add(values);
  128. }
  129. #endregion
  130. #region Data processing tab
  131. // sort by
  132. cbxSortBy.SelectedIndex = (int)Series.SortBy;
  133. // sort order
  134. cbxSortOrder.SelectedIndex = (int)Series.SortOrder;
  135. // group
  136. cbxGroupBy.SelectedIndex = (int)Series.GroupBy;
  137. udGroupInterval.Value = (decimal)Series.GroupInterval;
  138. cbxGroupFunction.SelectedIndex = (int)Series.GroupFunction;
  139. // collect
  140. cbxCollectData.SelectedIndex = (int)Series.Collect;
  141. udCollectValue.Value = (decimal)Series.CollectValue;
  142. tbCollectedItemText.Text = Series.CollectedItemText;
  143. cbxCollectedItemColor.Color = Series.CollectedItemColor;
  144. // explode
  145. pnExplode.Visible = ChartSeries.ChartType == SeriesChartType.Pie ||
  146. ChartSeries.ChartType == SeriesChartType.Doughnut;
  147. cbxExplode.SelectedIndex = (int)Series.PieExplode;
  148. tbExplodedValue.Text = Series.PieExplodeValue;
  149. #endregion
  150. #region Appearance tab
  151. Helper.ConstructCustomPropertiesEditor(pgAppearance, ChartSeries, Changed);
  152. #endregion
  153. #region Fill & Border tab
  154. // palette
  155. cbxPalette.SelectedIndex = (int)ChartSeries.Palette;
  156. // colors
  157. cbxBackColor.Color = ChartSeries.Color;
  158. cbxSecondaryColor.Color = ChartSeries.BackSecondaryColor;
  159. // gradient
  160. cbxGradient.SelectedIndex = (int)ChartSeries.BackGradientStyle;
  161. // hatch
  162. cbxHatchStyle.SelectedIndex = (int)ChartSeries.BackHatchStyle;
  163. // border
  164. cbxBorderColor.Color = ChartSeries.BorderColor;
  165. cbxBorderStyle.SelectedIndex = (int)ChartSeries.BorderDashStyle;
  166. udBorderWidth.Value = ChartSeries.BorderWidth;
  167. // shadow
  168. cbxShadowColor.Color = ChartSeries.ShadowColor;
  169. udShadowOffset.Value = ChartSeries.ShadowOffset;
  170. #endregion
  171. #region Labels tab
  172. // label view
  173. cbxLabelView.SelectedIndex = 0;
  174. tbLabelPattern.Text = ChartSeries.Label;
  175. tbLabelFormat.Text = ChartSeries.LabelFormat;
  176. // label font
  177. tbLabelFont.Text = Converter.ToString(ChartSeries.Font);
  178. // label colors
  179. cbxLabelForeColor.Color = ChartSeries.LabelForeColor;
  180. cbxLabelBackColor.Color = ChartSeries.LabelBackColor;
  181. // label border
  182. cbxLabelBorderColor.Color = ChartSeries.LabelBorderColor;
  183. cbxLabelBorderStyle.SelectedIndex = (int)ChartSeries.LabelBorderDashStyle;
  184. udLabelBorderWidth.Value = ChartSeries.LabelBorderWidth;
  185. #endregion
  186. #region Markers tab
  187. // marker style
  188. cbxMarkerStyle.SelectedIndex = (int)ChartSeries.MarkerStyle;
  189. // marker size
  190. udMarkerSize.Value = ChartSeries.MarkerSize;
  191. // marker step
  192. udMarkerStep.Value = ChartSeries.MarkerStep;
  193. // marker color
  194. cbxMarkerColor.Color = ChartSeries.MarkerColor;
  195. // border color
  196. cbxMarkerBorderColor.Color = ChartSeries.MarkerBorderColor;
  197. // border width
  198. udMarkerBorderWidth.Value = ChartSeries.MarkerBorderWidth;
  199. #endregion
  200. updating = false;
  201. }
  202. private void OnChange()
  203. {
  204. if (Changed != null)
  205. Changed(this, EventArgs.Empty);
  206. }
  207. private void Init()
  208. {
  209. MyRes res = null;
  210. MyRes cmnRes = new MyRes("Forms,ChartEditor,Common");
  211. #region Comboboxes
  212. cbxXValueType.Items.Clear();
  213. cbxXValueType.Items.AddRange(new string[] {
  214. "Auto", "Double", "Single", "Int32", "Int64", "UInt32", "UInt64",
  215. "String", "DateTime", "Date", "Time", "DateTimeOffset" });
  216. cbxYValueType.Items.Clear();
  217. cbxYValueType.Items.AddRange(new string[] {
  218. "Auto", "Double", "Single", "Int32", "Int64", "UInt32", "UInt64",
  219. "DateTime", "Date", "Time", "DateTimeOffset" });
  220. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,Data");
  221. cbxXAxisType.Items.Clear();
  222. cbxXAxisType.Items.AddRange(new string[] {
  223. res.Get("PrimaryAxis"), res.Get("SecondaryAxis") });
  224. cbxYAxisType.Items.Clear();
  225. cbxYAxisType.Items.AddRange(new string[] {
  226. res.Get("PrimaryAxis"), res.Get("SecondaryAxis") });
  227. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,DataProcessing");
  228. cbxSortBy.Items.Clear();
  229. cbxSortBy.Items.AddRange(new string[] {
  230. Res.Get("Forms,GroupBandEditor,NoSort"), res.Get("SortByX"), res.Get("SortByY") });
  231. res = new MyRes("Forms,GroupBandEditor");
  232. cbxSortOrder.Items.Clear();
  233. cbxSortOrder.Items.AddRange(new string[] {
  234. res.Get("Ascending"), res.Get("Descending") });
  235. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,DataProcessing,GroupBy");
  236. cbxGroupBy.Items.Clear();
  237. cbxGroupBy.Items.AddRange(new string[] {
  238. res.Get("None"), res.Get("XValue"), res.Get("Number"), res.Get("Years"), res.Get("Months"),
  239. res.Get("Weeks"), res.Get("Days"), res.Get("Hours"), res.Get("Minutes"), res.Get("Seconds"),
  240. res.Get("Milliseconds") });
  241. res = new MyRes("Forms,TotalEditor");
  242. cbxGroupFunction.Items.Clear();
  243. cbxGroupFunction.Items.AddRange(new object[] {
  244. res.Get("Sum"), res.Get("Min"), res.Get("Max"), res.Get("Avg"), res.Get("Count") });
  245. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,DataProcessing,CollectData");
  246. cbxCollectData.Items.Clear();
  247. cbxCollectData.Items.AddRange(new string[] {
  248. res.Get("None"), res.Get("TopN"), res.Get("BottomN"),
  249. res.Get("LessThan"), res.Get("LessThanPercent"),
  250. res.Get("GreaterThan"), res.Get("GreaterThanPercent") });
  251. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,DataProcessing,Explode");
  252. cbxExplode.Items.Clear();
  253. cbxExplode.Items.AddRange(new string[] {
  254. res.Get("None"), res.Get("Biggest"), res.Get("Lowest"), res.Get("Specific") });
  255. cbxPalette.Items.Clear();
  256. cbxPalette.Items.AddRange(Enum.GetNames(typeof(ChartColorPalette)));
  257. cbxGradient.Items.Clear();
  258. cbxGradient.Items.AddRange(Enum.GetNames(typeof(GradientStyle)));
  259. cbxHatchStyle.Items.Clear();
  260. cbxHatchStyle.Items.AddRange(Enum.GetNames(typeof(ChartHatchStyle)));
  261. cbxBorderStyle.Items.Clear();
  262. cbxBorderStyle.Items.AddRange(Enum.GetNames(typeof(ChartDashStyle)));
  263. cbxLabelView.Items.Clear();
  264. cbxLabelView.Items.AddRange(new string[] {
  265. "Custom", "X", "Y", "Percent", "X: Y", "X: Percent" });
  266. cbxLabelBorderStyle.Items.Clear();
  267. cbxLabelBorderStyle.Items.AddRange(Enum.GetNames(typeof(ChartDashStyle)));
  268. cbxMarkerStyle.Items.Clear();
  269. cbxMarkerStyle.Items.AddRange(Enum.GetNames(typeof(DataVisualization.Charting.MarkerStyle)));
  270. #endregion
  271. #region Data
  272. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,Data");
  273. pgData.Text = res.Get("");
  274. lblName.Text = res.Get("Name");
  275. lblXValue.Text = res.Get("XValue");
  276. lblColor.Text = res.Get("Color");
  277. lblFilter.Text = res.Get("Filter");
  278. lblXValueType.Text = res.Get("XValueType");
  279. lblYValueType.Text = res.Get("YValueType");
  280. lblXAxisType.Text = res.Get("XAxisType");
  281. lblYAxisType.Text = res.Get("YAxisType");
  282. res = new MyRes("Forms,ChartEditor,ChartEditorControl,Data");
  283. cbAutoSeriesForce.Text = res.Get("ForceAutoSeries");
  284. lblAutoSeriesData.Text = res.Get("DataColumn");
  285. lblAutoSeries.Text = res.Get("AutoSeries");
  286. #endregion
  287. #region Values
  288. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,Values");
  289. pgValues.Text = res.Get("");
  290. #endregion
  291. #region Data processing
  292. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,DataProcessing");
  293. pgDataProcessing.Text = res.Get("");
  294. lblSortBy.Text = res.Get("SortBy");
  295. lblSortOrder.Text = res.Get("SortOrder");
  296. lblGroupBy.Text = res.Get("GroupBy");
  297. lblGroupInterval.Text = res.Get("GroupInterval");
  298. lblGroupFunction.Text = res.Get("GroupFunction");
  299. lblCollectData.Text = res.Get("CollectData");
  300. lblCollectValue.Text = res.Get("Value");
  301. lblCollectedItemText.Text = res.Get("CollectedText");
  302. lblCollectedItemColor.Text = res.Get("CollectedColor");
  303. lblExplode.Text = res.Get("Explode");
  304. lblExplodedValue.Text = res.Get("Value");
  305. #endregion
  306. #region Appearance
  307. pgAppearance.Text = Res.Get("Forms,ChartEditor,SeriesEditorControl,Appearance");
  308. #endregion
  309. #region Fill & border
  310. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,FillBorder");
  311. pgFillBorder.Text = res.Get("");
  312. lblPalette.Text = res.Get("Palette");
  313. lblBackColor.Text = cmnRes.Get("Color");
  314. lblSecondaryColor.Text = cmnRes.Get("SecondaryColor");
  315. lblGradient.Text = cmnRes.Get("Gradient");
  316. lblHatchStyle.Text = cmnRes.Get("HatchStyle");
  317. lblBorderColor.Text = cmnRes.Get("BorderColor");
  318. lblBorderStyle.Text = cmnRes.Get("BorderStyle");
  319. lblBorderWidth.Text = cmnRes.Get("BorderWidth");
  320. lblShadowColor.Text = cmnRes.Get("ShadowColor");
  321. lblShadowOffset.Text = cmnRes.Get("ShadowOffset");
  322. #endregion
  323. #region Labels
  324. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,Labels");
  325. pgLabels.Text = res.Get("");
  326. lblLabelView.Text = res.Get("LabelView");
  327. lblLabelPattern.Text = res.Get("Pattern");
  328. lblLabelFormat.Text = cmnRes.Get("Format");
  329. lblLabelFont.Text = cmnRes.Get("Font");
  330. lblLabelForeColor.Text = cmnRes.Get("ForeColor");
  331. lblLabelBackColor.Text = cmnRes.Get("BackColor");
  332. lblLabelBorderColor.Text = cmnRes.Get("BorderColor");
  333. lblLabelBorderStyle.Text = cmnRes.Get("BorderStyle");
  334. lblLabelBorderWidth.Text = cmnRes.Get("BorderWidth");
  335. #endregion
  336. #region Markers
  337. res = new MyRes("Forms,ChartEditor,SeriesEditorControl,Markers");
  338. pgMarkers.Text = res.Get("");
  339. lblMarkerStyle.Text = res.Get("Style");
  340. lblMarkerSize.Text = res.Get("Size");
  341. lblMarkerStep.Text = res.Get("Step");
  342. lblMarkerColor.Text = res.Get("Color");
  343. lblMarkerBorderColor.Text = cmnRes.Get("BorderColor");
  344. lblMarkerBorderWidth.Text = cmnRes.Get("BorderWidth");
  345. #endregion
  346. }
  347. public void UpdateDpiDependencies()
  348. {
  349. tbFilter.Image = this.GetImage(52);
  350. tbLabelFont.Image = this.GetImage(59);
  351. tbExplodedValue.Image = this.GetImage(52);
  352. }
  353. public SeriesEditorControl()
  354. {
  355. InitializeComponent();
  356. Init();
  357. }
  358. #region Data tab
  359. private void tbName_Leave(object sender, EventArgs e)
  360. {
  361. ChartSeries.Name = tbName.Text;
  362. OnChange();
  363. }
  364. private void cbxXValue_Leave(object sender, EventArgs e)
  365. {
  366. Series.XValue = cbxXValue.Text;
  367. OnChange();
  368. }
  369. private void cbxYValue1_Leave(object sender, EventArgs e)
  370. {
  371. Series.YValue1 = cbxYValue1.Text;
  372. OnChange();
  373. }
  374. private void cbxYValue2_Leave(object sender, EventArgs e)
  375. {
  376. Series.YValue2 = cbxYValue2.Text;
  377. OnChange();
  378. }
  379. private void cbxYValue3_Leave(object sender, EventArgs e)
  380. {
  381. Series.YValue3 = cbxYValue3.Text;
  382. OnChange();
  383. }
  384. private void cbxYValue4_Leave(object sender, EventArgs e)
  385. {
  386. Series.YValue4 = cbxYValue4.Text;
  387. OnChange();
  388. }
  389. private void cbxColor_Leave(object sender, EventArgs e)
  390. {
  391. Series.Color = cbxColor.Text;
  392. OnChange();
  393. }
  394. private void tbFilter_Leave(object sender, EventArgs e)
  395. {
  396. Series.Filter = tbFilter.Text;
  397. OnChange();
  398. }
  399. private void tbFilter_ButtonClick(object sender, EventArgs e)
  400. {
  401. tbFilter.Text = Editors.EditExpression(Report, tbFilter.Text);
  402. }
  403. private void cbxXValueType_SelectedIndexChanged(object sender, EventArgs e)
  404. {
  405. if (updating)
  406. return;
  407. ChartSeries.XValueType = (ChartValueType)cbxXValueType.SelectedIndex;
  408. OnChange();
  409. }
  410. private void cbxYValueType_SelectedIndexChanged(object sender, EventArgs e)
  411. {
  412. if (updating)
  413. return;
  414. ChartSeries.YValueType = (ChartValueType)cbxYValueType.SelectedIndex;
  415. OnChange();
  416. }
  417. private void cbxXAxisType_SelectedIndexChanged(object sender, EventArgs e)
  418. {
  419. if (updating)
  420. return;
  421. ChartSeries.XAxisType = (AxisType)cbxXAxisType.SelectedIndex;
  422. OnChange();
  423. }
  424. private void cbxYAxisType_SelectedIndexChanged(object sender, EventArgs e)
  425. {
  426. if (updating)
  427. return;
  428. ChartSeries.YAxisType = (AxisType)cbxYAxisType.SelectedIndex;
  429. OnChange();
  430. }
  431. #endregion
  432. #region Values tab
  433. private void gvValues_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  434. {
  435. GetGridValues();
  436. }
  437. private void gvValues_UserAddedRow(object sender, DataGridViewRowEventArgs e)
  438. {
  439. GetGridValues();
  440. }
  441. private void gvValues_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
  442. {
  443. GetGridValues();
  444. }
  445. private void GetGridValues()
  446. {
  447. if (updating)
  448. return;
  449. if (gvValues.IsCurrentCellInEditMode)
  450. gvValues.EndEdit();
  451. int yValuesCount = Series.YValuesPerPoint;
  452. ChartSeries.Points.Clear();
  453. for (int i = 0; i < gvValues.Rows.Count - 1; i++)
  454. {
  455. object[] yValues = new object[yValuesCount];
  456. object xValue = gvValues[0, i].Value;
  457. if (ChartSeries.XValueType != ChartValueType.String)
  458. {
  459. try
  460. {
  461. xValue = double.Parse((string)xValue);
  462. }
  463. catch
  464. {
  465. xValue = 0;
  466. }
  467. }
  468. for (int j = 0; j < yValuesCount; j++)
  469. {
  470. object yValue = gvValues[j + 1, i].Value;
  471. try
  472. {
  473. yValues[j] = double.Parse(yValue.ToString());
  474. }
  475. catch
  476. {
  477. yValues[j] = 0;
  478. }
  479. }
  480. ChartSeries.Points.AddXY(xValue, yValues);
  481. }
  482. OnChange();
  483. }
  484. #endregion
  485. #region Data processing tab
  486. private void cbxSortBy_SelectedIndexChanged(object sender, EventArgs e)
  487. {
  488. Series.SortBy = (SortBy)cbxSortBy.SelectedIndex;
  489. cbxSortOrder.Enabled = Series.SortBy != SortBy.None;
  490. lblSortOrder.Enabled = cbxSortOrder.Enabled;
  491. OnChange();
  492. }
  493. private void cbxSortOrder_Leave(object sender, EventArgs e)
  494. {
  495. Series.SortOrder = (ChartSortOrder)cbxSortOrder.SelectedIndex;
  496. OnChange();
  497. }
  498. private void cbxGroupBy_SelectedIndexChanged(object sender, EventArgs e)
  499. {
  500. Series.GroupBy = (GroupBy)cbxGroupBy.SelectedIndex;
  501. udGroupInterval.Enabled = Series.GroupBy != GroupBy.None && Series.GroupBy != GroupBy.XValue;
  502. lblGroupInterval.Enabled = udGroupInterval.Enabled;
  503. cbxGroupFunction.Enabled = Series.GroupBy != GroupBy.None;
  504. lblGroupFunction.Enabled = cbxGroupFunction.Enabled;
  505. OnChange();
  506. }
  507. private void udGroupInterval_Leave(object sender, EventArgs e)
  508. {
  509. Series.GroupInterval = (float)udGroupInterval.Value;
  510. OnChange();
  511. }
  512. private void cbxGroupFunction_Leave(object sender, EventArgs e)
  513. {
  514. Series.GroupFunction = (TotalType)cbxGroupFunction.SelectedIndex;
  515. OnChange();
  516. }
  517. private void cbxCollectData_SelectedIndexChanged(object sender, EventArgs e)
  518. {
  519. pnCollectData.Enabled = cbxCollectData.SelectedIndex != 0;
  520. if (!updating)
  521. {
  522. Series.Collect = (Collect)cbxCollectData.SelectedIndex;
  523. OnChange();
  524. }
  525. }
  526. private void udCollectValue_Leave(object sender, EventArgs e)
  527. {
  528. Series.CollectValue = (int)udCollectValue.Value;
  529. OnChange();
  530. }
  531. private void tbCollectedItemText_Leave(object sender, EventArgs e)
  532. {
  533. Series.CollectedItemText = tbCollectedItemText.Text;
  534. OnChange();
  535. }
  536. private void cbxCollectedItemColor_ColorSelected(object sender, EventArgs e)
  537. {
  538. Series.CollectedItemColor = cbxCollectedItemColor.Color;
  539. OnChange();
  540. }
  541. private void cbxExplode_SelectedIndexChanged(object sender, EventArgs e)
  542. {
  543. bool valueEnabled = cbxExplode.SelectedIndex == 3;
  544. lblExplodedValue.Enabled = valueEnabled;
  545. tbExplodedValue.Enabled = valueEnabled;
  546. if (!valueEnabled)
  547. tbExplodedValue.Text = "";
  548. if (!updating)
  549. {
  550. Series.PieExplode = (PieExplode)cbxExplode.SelectedIndex;
  551. if (!valueEnabled)
  552. Series.PieExplodeValue = "";
  553. OnChange();
  554. }
  555. }
  556. private void tbExplodedValue_Leave(object sender, EventArgs e)
  557. {
  558. Series.PieExplodeValue = tbExplodedValue.Text;
  559. OnChange();
  560. }
  561. private void tbExplodedValue_ButtonClick(object sender, EventArgs e)
  562. {
  563. tbExplodedValue.Text = Editors.EditExpression(Report, tbExplodedValue.Text);
  564. }
  565. #endregion
  566. #region Fill & Border tab
  567. private void cbxPalette_SelectedIndexChanged(object sender, EventArgs e)
  568. {
  569. if (updating)
  570. return;
  571. ChartSeries.Palette = (ChartColorPalette)cbxPalette.SelectedIndex;
  572. OnChange();
  573. }
  574. private void cbxBackColor_ColorSelected(object sender, EventArgs e)
  575. {
  576. if (updating)
  577. return;
  578. ChartSeries.Color = cbxBackColor.Color;
  579. OnChange();
  580. }
  581. private void cbxSecondaryColor_ColorSelected(object sender, EventArgs e)
  582. {
  583. if (updating)
  584. return;
  585. ChartSeries.BackSecondaryColor = cbxSecondaryColor.Color;
  586. OnChange();
  587. }
  588. private void cbxGradient_SelectedIndexChanged(object sender, EventArgs e)
  589. {
  590. if (updating)
  591. return;
  592. ChartSeries.BackGradientStyle = (GradientStyle)cbxGradient.SelectedIndex;
  593. OnChange();
  594. }
  595. private void cbxHatchStyle_SelectedIndexChanged(object sender, EventArgs e)
  596. {
  597. if (updating)
  598. return;
  599. ChartSeries.BackHatchStyle = (ChartHatchStyle)cbxHatchStyle.SelectedIndex;
  600. OnChange();
  601. }
  602. private void cbxBorderColor_ColorSelected(object sender, EventArgs e)
  603. {
  604. if (updating)
  605. return;
  606. ChartSeries.BorderColor = cbxBorderColor.Color;
  607. OnChange();
  608. }
  609. private void cbxBorderStyle_SelectedIndexChanged(object sender, EventArgs e)
  610. {
  611. if (updating)
  612. return;
  613. ChartSeries.BorderDashStyle = (ChartDashStyle)cbxBorderStyle.SelectedIndex;
  614. OnChange();
  615. }
  616. private void udBorderWidth_ValueChanged(object sender, EventArgs e)
  617. {
  618. if (updating)
  619. return;
  620. ChartSeries.BorderWidth = (int)udBorderWidth.Value;
  621. OnChange();
  622. }
  623. private void cbxShadowColor_ColorSelected(object sender, EventArgs e)
  624. {
  625. if (updating)
  626. return;
  627. ChartSeries.ShadowColor = cbxShadowColor.Color;
  628. OnChange();
  629. }
  630. private void udShadowOffset_ValueChanged(object sender, EventArgs e)
  631. {
  632. if (updating)
  633. return;
  634. ChartSeries.ShadowOffset = (int)udShadowOffset.Value;
  635. OnChange();
  636. }
  637. #endregion
  638. #region Labels tab
  639. private void cbxLabelView_SelectedIndexChanged(object sender, EventArgs e)
  640. {
  641. if (updating)
  642. return;
  643. string pattern = "";
  644. switch (cbxLabelView.SelectedIndex)
  645. {
  646. case 1:
  647. pattern = "#VALX";
  648. break;
  649. case 2:
  650. pattern = "#VALY";
  651. break;
  652. case 3:
  653. pattern = "#PERCENT";
  654. break;
  655. case 4:
  656. pattern = "#VALX: #VALY";
  657. break;
  658. case 5:
  659. pattern = "#VALX: #PERCENT";
  660. break;
  661. }
  662. tbLabelPattern.Text = pattern;
  663. ChartSeries.Label = pattern;
  664. OnChange();
  665. }
  666. private void tbLabelPattern_Leave(object sender, EventArgs e)
  667. {
  668. ChartSeries.Label = tbLabelPattern.Text;
  669. OnChange();
  670. }
  671. private void tbLabelFormat_Leave(object sender, EventArgs e)
  672. {
  673. ChartSeries.LabelFormat = tbLabelFormat.Text;
  674. OnChange();
  675. }
  676. private void tbLabelFont_ButtonClick(object sender, EventArgs e)
  677. {
  678. using (FontDialog dialog = new FontDialog())
  679. {
  680. dialog.Font = ChartSeries.Font;
  681. if (dialog.ShowDialog() == DialogResult.OK)
  682. {
  683. ChartSeries.Font = dialog.Font;
  684. tbLabelFont.Text = Converter.ToString(dialog.Font);
  685. OnChange();
  686. }
  687. }
  688. }
  689. private void cbxLabelForeColor_ColorSelected(object sender, EventArgs e)
  690. {
  691. if (updating)
  692. return;
  693. ChartSeries.LabelForeColor = cbxLabelForeColor.Color;
  694. OnChange();
  695. }
  696. private void cbxLabelBackColor_ColorSelected(object sender, EventArgs e)
  697. {
  698. if (updating)
  699. return;
  700. ChartSeries.LabelBackColor = cbxLabelBackColor.Color;
  701. OnChange();
  702. }
  703. private void cbxLabelBorderColor_ColorSelected(object sender, EventArgs e)
  704. {
  705. if (updating)
  706. return;
  707. ChartSeries.LabelBorderColor = cbxLabelBorderColor.Color;
  708. OnChange();
  709. }
  710. private void cbxLabelBorderStyle_SelectedIndexChanged(object sender, EventArgs e)
  711. {
  712. if (updating)
  713. return;
  714. ChartSeries.LabelBorderDashStyle = (ChartDashStyle)cbxLabelBorderStyle.SelectedIndex;
  715. }
  716. private void udLabelBorderWidth_ValueChanged(object sender, EventArgs e)
  717. {
  718. if (updating)
  719. return;
  720. ChartSeries.LabelBorderWidth = (int)udLabelBorderWidth.Value;
  721. OnChange();
  722. }
  723. #endregion
  724. #region Markers tab
  725. private void cbxMarkerStyle_SelectedIndexChanged(object sender, EventArgs e)
  726. {
  727. if (updating)
  728. return;
  729. ChartSeries.MarkerStyle = (DataVisualization.Charting.MarkerStyle)cbxMarkerStyle.SelectedIndex;
  730. OnChange();
  731. }
  732. private void udMarkerSize_ValueChanged(object sender, EventArgs e)
  733. {
  734. if (updating)
  735. return;
  736. ChartSeries.MarkerSize = (int)udMarkerSize.Value;
  737. OnChange();
  738. }
  739. private void udMarkerStep_ValueChanged(object sender, EventArgs e)
  740. {
  741. if (updating)
  742. return;
  743. ChartSeries.MarkerStep = (int)udMarkerStep.Value;
  744. OnChange();
  745. }
  746. private void cbxMarkerColor_ColorSelected(object sender, EventArgs e)
  747. {
  748. if (updating)
  749. return;
  750. ChartSeries.MarkerColor = cbxMarkerColor.Color;
  751. OnChange();
  752. }
  753. private void cbxMarkerBorderColor_ColorSelected(object sender, EventArgs e)
  754. {
  755. if (updating)
  756. return;
  757. ChartSeries.MarkerBorderColor = cbxMarkerBorderColor.Color;
  758. OnChange();
  759. }
  760. private void udMarkerBorderWidth_ValueChanged(object sender, EventArgs e)
  761. {
  762. if (updating)
  763. return;
  764. ChartSeries.MarkerBorderWidth = (int)udMarkerBorderWidth.Value;
  765. OnChange();
  766. }
  767. #endregion
  768. private void cbxAutoSeriesData_Leave(object sender, EventArgs e)
  769. {
  770. Series.AutoSeriesColumn = cbxAutoSeriesData.Text;
  771. OnChange();
  772. }
  773. private void cbAutoSeriesForce_Leave(object sender, EventArgs e)
  774. {
  775. Series.AutoSeriesForce = cbAutoSeriesForce.Checked;
  776. OnChange();
  777. }
  778. }
  779. }