QueryWizardForm.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. using FastReport.Utils;
  5. using FastReport.Data;
  6. using FastReport.Design;
  7. namespace FastReport.Forms
  8. {
  9. internal partial class QueryWizardForm : BaseWizardForm
  10. {
  11. private TableDataSource table;
  12. public override int VisiblePanelIndex
  13. {
  14. get { return base.VisiblePanelIndex; }
  15. set
  16. {
  17. // disable page 2,3 in case of non-sql datasource
  18. if (table.Connection != null && !table.Connection.IsSqlBased)
  19. {
  20. if (value == 1)
  21. value = 3;
  22. if (value == 2)
  23. value = 0;
  24. }
  25. if (value == 2)
  26. UpdateParamTree(null);
  27. if (value == 3)
  28. {
  29. table.Alias = tbName.Text;
  30. table.SelectCommand = tbSql.Text;
  31. try
  32. {
  33. table.RefreshTable();
  34. UpdateColumnTree(null);
  35. }
  36. catch (Exception e)
  37. {
  38. FRMessageBox.Error(e.Message);
  39. }
  40. }
  41. base.VisiblePanelIndex = value;
  42. }
  43. }
  44. private void tbSql_KeyDown(object sender, KeyEventArgs e)
  45. {
  46. if (e.KeyData == (Keys.A | Keys.Control))
  47. tbSql.SelectAll();
  48. }
  49. private void btnQueryBuilder_Click(object sender, EventArgs e)
  50. {
  51. if (table.Connection != null)
  52. using (DataConnectionBase conn = Activator.CreateInstance(table.Connection.GetType()) as DataConnectionBase)
  53. {
  54. conn.Assign(table.Connection);
  55. if (Config.DesignerSettings.ApplicationConnection != null)
  56. conn.ConnectionString = Config.DesignerSettings.ApplicationConnection.ConnectionString;
  57. CustomQueryBuilderEventArgs args = new CustomQueryBuilderEventArgs(conn, tbSql.Text, table.Parameters);
  58. Config.DesignerSettings.OnCustomQueryBuilder(this, args);
  59. tbSql.Text = args.SQL;
  60. }
  61. }
  62. private void btnAddParameter_Click(object sender, EventArgs e)
  63. {
  64. CommandParameter c = new CommandParameter();
  65. c.Name = table.Parameters.CreateUniqueName("Parameter");
  66. c.DataType = table.Connection.GetDefaultParameterType();
  67. table.Parameters.Add(c);
  68. UpdateParamTree(c);
  69. }
  70. private void btnDeleteParameter_Click(object sender, EventArgs e)
  71. {
  72. if (tvParameters.SelectedNode == null)
  73. return;
  74. Base c = tvParameters.SelectedNode.Tag as Base;
  75. if (c == null)
  76. return;
  77. pgParamProperties.SelectedObject = null;
  78. c.Dispose();
  79. UpdateParamTree(null);
  80. }
  81. private void btnParameterUp_Click(object sender, EventArgs e)
  82. {
  83. if (tvParameters.SelectedNode == null)
  84. return;
  85. Base c = tvParameters.SelectedNode.Tag as Base;
  86. if (c == null)
  87. return;
  88. int index = table.Parameters.IndexOf(c);
  89. table.Parameters.RemoveAt(index);
  90. table.Parameters.Insert(index - 1, c);
  91. UpdateParamTree(c);
  92. }
  93. private void btnParameterDown_Click(object sender, EventArgs e)
  94. {
  95. if (tvParameters.SelectedNode == null)
  96. return;
  97. Base c = tvParameters.SelectedNode.Tag as Base;
  98. if (c == null)
  99. return;
  100. int index = table.Parameters.IndexOf(c);
  101. table.Parameters.RemoveAt(index);
  102. table.Parameters.Insert(index + 1, c);
  103. UpdateParamTree(c);
  104. }
  105. private void tvParameters_KeyDown(object sender, KeyEventArgs e)
  106. {
  107. if (e.KeyCode == Keys.Delete)
  108. btnDeleteParameter_Click(this, EventArgs.Empty);
  109. }
  110. private void btnRefreshColumns_Click(object sender, EventArgs e)
  111. {
  112. table.RefreshColumns(true);
  113. UpdateColumnTree(null);
  114. }
  115. private void btnAddColumn_Click(object sender, EventArgs e)
  116. {
  117. Column c = new Column();
  118. c.Name = table.Columns.CreateUniqueName("Column");
  119. c.Alias = table.Columns.CreateUniqueAlias(c.Alias);
  120. c.Calculated = true;
  121. table.Columns.Add(c);
  122. UpdateColumnTree(c);
  123. }
  124. private void btnDeleteColumn_Click(object sender, EventArgs e)
  125. {
  126. if (tvColumns.SelectedNode == null)
  127. return;
  128. Base c = tvColumns.SelectedNode.Tag as Base;
  129. if (c == null)
  130. return;
  131. pgColumnProperties.SelectedObject = null;
  132. c.Dispose();
  133. UpdateColumnTree(null);
  134. }
  135. private void tvColumns_KeyDown(object sender, KeyEventArgs e)
  136. {
  137. if (e.KeyCode == Keys.Delete)
  138. btnDeleteColumn_Click(this, EventArgs.Empty);
  139. }
  140. private void tvParameters_AfterSelect(object sender, TreeViewEventArgs e)
  141. {
  142. UpdateParamSelection();
  143. }
  144. private void UpdateParamSelection()
  145. {
  146. if (tvParameters.SelectedNode == null)
  147. {
  148. pgParamProperties.SelectedObject = null;
  149. btnDeleteParameter.Enabled = false;
  150. btnParameterUp.Enabled = false;
  151. btnParameterDown.Enabled = false;
  152. return;
  153. }
  154. pgParamProperties.SelectedObject = tvParameters.SelectedNode.Tag;
  155. btnDeleteParameter.Enabled = true;
  156. btnParameterUp.Enabled = tvParameters.SelectedNode.Index > 0;
  157. btnParameterDown.Enabled = tvParameters.SelectedNode.Index < tvParameters.Nodes.Count - 1;
  158. }
  159. private void tvColumns_AfterSelect(object sender, TreeViewEventArgs e)
  160. {
  161. pgColumnProperties.SelectedObject = tvColumns.SelectedNode.Tag;
  162. }
  163. private void pgParamProperties_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  164. {
  165. if (tvParameters.SelectedNode != null && tvParameters.SelectedNode.Tag is CommandParameter)
  166. tvParameters.SelectedNode.Text = (tvParameters.SelectedNode.Tag as CommandParameter).Name;
  167. }
  168. private void pgColumnProperties_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
  169. {
  170. if (tvColumns.SelectedNode != null && tvColumns.SelectedNode.Tag is Column)
  171. tvColumns.SelectedNode.Text = (tvColumns.SelectedNode.Tag as Column).Alias;
  172. }
  173. private void UpdateParamTree(Base focusObj)
  174. {
  175. tvParameters.BeginUpdate();
  176. tvParameters.Nodes.Clear();
  177. foreach (CommandParameter c in table.Parameters)
  178. {
  179. TreeNode node = tvParameters.Nodes.Add(c.Name);
  180. node.Tag = c;
  181. node.ImageIndex = 231;
  182. node.SelectedImageIndex = node.ImageIndex;
  183. if (c == focusObj)
  184. tvParameters.SelectedNode = node;
  185. }
  186. if (focusObj == null && tvParameters.Nodes.Count > 0)
  187. tvParameters.SelectedNode = tvParameters.Nodes[0];
  188. tvParameters.EndUpdate();
  189. UpdateParamSelection();
  190. }
  191. private void UpdateColumnTree(Base focusObj)
  192. {
  193. tvColumns.BeginUpdate();
  194. tvColumns.Nodes.Clear();
  195. table.InitSchema();
  196. foreach (Column c in table.Columns)
  197. {
  198. TreeNode node = tvColumns.Nodes.Add(c.Alias);
  199. node.Tag = c;
  200. node.ImageIndex = c.GetImageIndex();
  201. node.SelectedImageIndex = node.ImageIndex;
  202. if (c == focusObj)
  203. tvColumns.SelectedNode = node;
  204. }
  205. if (focusObj == null && tvColumns.Nodes.Count > 0)
  206. tvColumns.SelectedNode = tvColumns.Nodes[0];
  207. tvColumns.EndUpdate();
  208. }
  209. private void Init()
  210. {
  211. VisiblePanelIndex = 0;
  212. tsParameters.Renderer = Config.DesignerSettings.ToolStripRenderer;
  213. tsColumns.Renderer = Config.DesignerSettings.ToolStripRenderer;
  214. tbName.Text = table.Alias;
  215. tbSql.Text = table.SelectCommand;
  216. }
  217. public override void UpdateDpiDependencies()
  218. {
  219. base.UpdateDpiDependencies();
  220. tbSql.Font = this.LogicalToDevice(GetConfigFont("QueryWizardForm", "QueryWindow"), true);
  221. tbSql.Height = btnQueryBuilder.Top - tbSql.Top - 12;
  222. picIcon.Image = GetImage("Images.QueryWizard.png");
  223. tvParameters.ImageList = GetImages();
  224. tvColumns.ImageList = GetImages();
  225. btnAddParameter.Image = GetImage(56);
  226. btnDeleteParameter.Image = GetImage(51);
  227. btnParameterUp.Image = GetImage(208);
  228. btnParameterDown.Image = GetImage(209);
  229. btnRefreshColumns.Image = GetImage(232);
  230. btnAddColumn.Image = GetImage(55);
  231. btnDeleteColumn.Image = GetImage(51);
  232. MinimumSize = this.LogicalToDevice(new Size(450, 430));
  233. }
  234. //For transfer to Utils
  235. private Font GetConfigFont(String formName, String formElement)
  236. {
  237. XmlItem xi = Config.Root.FindItem("Designer").FindItem("Fonts").FindItem(formName).FindItem(formElement);
  238. string QueryFontName = xi.GetProp("font-name");
  239. string QueryFontSize = xi.GetProp("font-size");
  240. bool bold = xi.GetProp("font-bold") == "1";
  241. bool italic = xi.GetProp("font-italic") == "1";
  242. return new Font(
  243. QueryFontName == "" ? "Tahoma" : QueryFontName,
  244. QueryFontSize == "" ? 8 : float.Parse(QueryFontSize),
  245. (italic ? FontStyle.Italic : 0) | (bold ? FontStyle.Bold : 0)
  246. );
  247. }
  248. private void TableWizardForm_FormClosed(object sender, FormClosedEventArgs e)
  249. {
  250. Config.SaveFormState(this);
  251. }
  252. public override void Localize()
  253. {
  254. base.Localize();
  255. MyRes res = new MyRes("Forms,QueryWizard");
  256. Text = res.Get("");
  257. pnName.Text = res.Get("Page1");
  258. pnSql.Text = res.Get("Page2");
  259. pnParameters.Text = res.Get("Page3");
  260. pnColumns.Text = res.Get("Page4");
  261. lblSetName.Text = res.Get("SetName");
  262. lblNameHint.Text = res.Get("NameHint");
  263. lblWhatData.Text = res.Get("WhatData");
  264. lblTypeSql.Text = res.Get("TypeSql");
  265. btnQueryBuilder.Text = res.Get("QueryBuilder");
  266. btnAddParameter.Text = res.Get("AddParameter");
  267. btnDeleteParameter.Text = res.Get("Delete");
  268. btnRefreshColumns.Text = res.Get("Refresh");
  269. btnAddColumn.Text = res.Get("AddColumn");
  270. btnDeleteColumn.Text = res.Get("Delete");
  271. }
  272. public QueryWizardForm(TableDataSource table)
  273. {
  274. this.table = table;
  275. InitializeComponent();
  276. Localize();
  277. Init();
  278. Config.RestoreFormState(this);
  279. UIUtils.CheckRTL(this);
  280. UpdateDpiDependencies();
  281. }
  282. }
  283. }