123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using FastReport.Utils;
- using FastReport.Data;
- using FastReport.Design;
- using System.Linq;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- namespace FastReport.Forms
- {
- internal partial class QueryWizardForm : BaseWizardForm
- {
- private TableDataSource table;
- public override int VisiblePanelIndex
- {
- get { return base.VisiblePanelIndex; }
- set
- {
- if (value == 1 && table.Connection != null)
- {
- var unavailableName = table.Connection.Tables.Cast<TableDataSource>()
- .Where(t => t.TableName.Replace("\"", "") == tbName.Text || (t.TableName == "" && t.Alias == tbName.Text))
- .Any();
- if (unavailableName && tbName.Text != table.Name && table.Alias != tbName.Text)
- {
- FRMessageBox.Error(Res.Get("Forms,QueryWizard,DuplicateName"));
- value--;
- }
- }
- // disable page 2,3 in case of non-sql datasource
- if (table.Connection == null || !table.Connection.IsSqlBased)
- {
- if (value == 1)
- value = 3;
- if (value == 2)
- value = 0;
- }
- if (value == 2)
- {
- List<string> duplicateParamName = new List<string>();
- if (tbSql.Text.Length > 0)
- {
- MatchCollection param = Regex.Matches(tbSql.Text, @"@(\w+)\b");
- var distinctParams = param.Cast<Match>().Select(match => match.Groups[1].Value).Distinct();
- duplicateParamName = param.Cast<Match>()
- .Select(match => match.Groups[1].Value)
- .GroupBy(word => word)
- .Where(group => group.Count() > 1)
- .Select(group => group.Key)
- .ToList();
- foreach (var match in distinctParams)
- {
- CommandParameter c = new CommandParameter();
- c.Name = match;
- c.DataType = table.Connection.GetDefaultParameterType();
- if (!table.Parameters.Contains(table.Parameters.FindByName(c.Name)))
- table.Parameters.Add(c);
- }
- }
- if (duplicateParamName.Count > 0)
- {
- string warningMessage = Res.Get("Forms,QueryWizard,DuplicateParamName");
- FRMessageBox.Warning(string.Format(warningMessage, string.Join(", ", duplicateParamName)));
- }
- UpdateParamTree(null);
- }
- if (value == 3)
- {
- table.Alias = tbName.Text;
- table.SelectCommand = tbSql.Text;
- try
- {
- table.RefreshTable();
- UpdateColumnTree(null);
- }
- catch (Exception e)
- {
- FRMessageBox.Error(e.Message);
- }
- }
- base.VisiblePanelIndex = value;
- }
- }
- public bool ForParamEdit
- {
- set
- {
- if (value)
- {
- btnNext.Enabled = false;
- btnPrevious.Enabled = false;
- btnFinish.Enabled = true;
- tsParameters.Enabled = false;
- }
- }
- }
- private void tbSql_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyData == (Keys.A | Keys.Control))
- tbSql.SelectAll();
- }
- private void btnQueryBuilder_Click(object sender, EventArgs e)
- {
- if (table.Connection != null)
- using (DataConnectionBase conn = Activator.CreateInstance(table.Connection.GetType()) as DataConnectionBase)
- {
- conn.Assign(table.Connection);
- if (Config.DesignerSettings.ApplicationConnection != null)
- conn.ConnectionString = Config.DesignerSettings.ApplicationConnection.ConnectionString;
- CustomQueryBuilderEventArgs args = new CustomQueryBuilderEventArgs(conn, tbSql.Text, table.Parameters);
- Config.DesignerSettings.OnCustomQueryBuilder(this, args);
- tbSql.Text = args.SQL;
- }
- }
- private void btnAddParameter_Click(object sender, EventArgs e)
- {
- CommandParameter c = new CommandParameter();
- c.Name = table.Parameters.CreateUniqueName("Parameter");
- c.DataType = table.Connection.GetDefaultParameterType();
- table.Parameters.Add(c);
- UpdateParamTree(c);
- }
- private void btnDeleteParameter_Click(object sender, EventArgs e)
- {
- if (tvParameters.SelectedNode == null)
- return;
- Base c = tvParameters.SelectedNode.Tag as Base;
- if (c == null)
- return;
- pgParamProperties.SelectedObject = null;
- c.Dispose();
- UpdateParamTree(null);
- }
- private void btnParameterUp_Click(object sender, EventArgs e)
- {
- if (tvParameters.SelectedNode == null)
- return;
- Base c = tvParameters.SelectedNode.Tag as Base;
- if (c == null)
- return;
- int index = table.Parameters.IndexOf(c);
- table.Parameters.RemoveAt(index);
- table.Parameters.Insert(index - 1, c);
- UpdateParamTree(c);
- }
- private void btnParameterDown_Click(object sender, EventArgs e)
- {
- if (tvParameters.SelectedNode == null)
- return;
- Base c = tvParameters.SelectedNode.Tag as Base;
- if (c == null)
- return;
- int index = table.Parameters.IndexOf(c);
- table.Parameters.RemoveAt(index);
- table.Parameters.Insert(index + 1, c);
- UpdateParamTree(c);
- }
- private void tvParameters_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Delete)
- btnDeleteParameter_Click(this, EventArgs.Empty);
- }
- private void btnRefreshColumns_Click(object sender, EventArgs e)
- {
- table.RefreshColumns(true);
- UpdateColumnTree(null);
- }
- private void btnAddColumn_Click(object sender, EventArgs e)
- {
- Column c = new Column();
- c.Name = table.Columns.CreateUniqueName("Column");
- c.Alias = table.Columns.CreateUniqueAlias(c.Alias);
- c.Calculated = true;
- table.Columns.Add(c);
- UpdateColumnTree(c);
- }
- private void btnDeleteColumn_Click(object sender, EventArgs e)
- {
- if (tvColumns.SelectedNode == null)
- return;
- Base c = tvColumns.SelectedNode.Tag as Base;
- if (c == null)
- return;
- pgColumnProperties.SelectedObject = null;
- c.Dispose();
- UpdateColumnTree(null);
- }
- private void tvColumns_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Delete)
- btnDeleteColumn_Click(this, EventArgs.Empty);
- }
- private void tvParameters_AfterSelect(object sender, TreeViewEventArgs e)
- {
- UpdateParamSelection();
- }
- private void UpdateParamSelection()
- {
- if (tvParameters.SelectedNode == null)
- {
- pgParamProperties.SelectedObject = null;
- btnDeleteParameter.Enabled = false;
- btnParameterUp.Enabled = false;
- btnParameterDown.Enabled = false;
- return;
- }
- pgParamProperties.SelectedObject = tvParameters.SelectedNode.Tag;
- btnDeleteParameter.Enabled = true;
- btnParameterUp.Enabled = tvParameters.SelectedNode.Index > 0;
- btnParameterDown.Enabled = tvParameters.SelectedNode.Index < tvParameters.Nodes.Count - 1;
- }
- private void tvColumns_AfterSelect(object sender, TreeViewEventArgs e)
- {
- pgColumnProperties.SelectedObject = tvColumns.SelectedNode.Tag;
- }
- private void pgParamProperties_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
- {
- if (tvParameters.SelectedNode != null && tvParameters.SelectedNode.Tag is CommandParameter)
- tvParameters.SelectedNode.Text = (tvParameters.SelectedNode.Tag as CommandParameter).Name;
- }
- private void pgColumnProperties_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
- {
- if (tvColumns.SelectedNode != null && tvColumns.SelectedNode.Tag is Column)
- tvColumns.SelectedNode.Text = (tvColumns.SelectedNode.Tag as Column).Alias;
- }
- private void UpdateParamTree(Base focusObj)
- {
- tvParameters.BeginUpdate();
- tvParameters.Nodes.Clear();
- foreach (CommandParameter c in table.Parameters)
- {
- TreeNode node = tvParameters.Nodes.Add(c.Name);
- node.Tag = c;
- node.ImageIndex = 231;
- node.SelectedImageIndex = node.ImageIndex;
- if (c == focusObj)
- tvParameters.SelectedNode = node;
- }
- if (focusObj == null && tvParameters.Nodes.Count > 0)
- tvParameters.SelectedNode = tvParameters.Nodes[0];
- tvParameters.EndUpdate();
- UpdateParamSelection();
- }
- private void UpdateColumnTree(Base focusObj)
- {
- tvColumns.BeginUpdate();
- tvColumns.Nodes.Clear();
- table.InitSchema();
- foreach (Column c in table.Columns)
- {
- TreeNode node = tvColumns.Nodes.Add(c.Alias);
- node.Tag = c;
- node.ImageIndex = c.GetImageIndex();
- node.SelectedImageIndex = node.ImageIndex;
- if (c == focusObj)
- tvColumns.SelectedNode = node;
- }
- if (focusObj == null && tvColumns.Nodes.Count > 0)
- tvColumns.SelectedNode = tvColumns.Nodes[0];
- tvColumns.EndUpdate();
- }
- private void Init()
- {
- VisiblePanelIndex = 0;
- tsParameters.Renderer = Config.DesignerSettings.ToolStripRenderer;
- tsColumns.Renderer = Config.DesignerSettings.ToolStripRenderer;
- tbName.Text = table.Alias;
- tbSql.Text = table.SelectCommand;
- }
- public override void UpdateDpiDependencies()
- {
- base.UpdateDpiDependencies();
- lblSetName.Font = lblWhatData.Font = this.LogicalToDevice(new Font(DrawUtils.DefaultFont, FontStyle.Bold), true);
- tsColumns.Height = tsParameters.Height = ts1.Height = ts2.Height = this.LogicalToDevice(27);
- btnAddColumn.Size = btnAddParameter.Size = btnDeleteColumn.Size = btnDeleteParameter.Size = btnRefreshColumns.Size = btnParameterUp.Size = btnParameterDown.Size =
- this.LogicalToDevice(new Size(22, 22));
- tbSql.Font = this.LogicalToDevice(Storage.GetFont("QueryWindow", DrawUtils.FixedFont), true);
- tbSql.Height = btnQueryBuilder.Top - tbSql.Top - 12;
- picIcon.Image = GetImage("Images.QueryWizard.png");
- tvParameters.ImageList = GetImages();
- tvColumns.ImageList = GetImages();
- btnAddParameter.Image = GetImage(56);
- btnDeleteParameter.Image = GetImage(51);
- btnParameterUp.Image = GetImage(208);
- btnParameterDown.Image = GetImage(209);
- btnRefreshColumns.Image = GetImage(232);
- btnAddColumn.Image = GetImage(55);
- btnDeleteColumn.Image = GetImage(51);
- MinimumSize = this.LogicalToDevice(new Size(450, 430));
- }
- public override void Localize()
- {
- base.Localize();
- MyRes res = new MyRes("Forms,QueryWizard");
- Text = res.Get("");
- pnName.Text = res.Get("Page1");
- pnSql.Text = res.Get("Page2");
- pnParameters.Text = res.Get("Page3");
- pnColumns.Text = res.Get("Page4");
- lblSetName.Text = res.Get("SetName");
- lblNameHint.Text = res.Get("NameHint");
- lblWhatData.Text = res.Get("WhatData");
- lblTypeSql.Text = res.Get("TypeSql");
- btnQueryBuilder.Text = res.Get("QueryBuilder");
- btnAddParameter.ToolTipText = res.Get("AddParameter");
- btnDeleteParameter.ToolTipText = res.Get("Delete");
- btnRefreshColumns.ToolTipText = res.Get("Refresh");
- btnAddColumn.ToolTipText = res.Get("AddColumn");
- btnDeleteColumn.ToolTipText = res.Get("Delete");
- }
- public QueryWizardForm(TableDataSource table)
- {
- this.table = table;
- CanSaveRestoreState = true;
- InitializeComponent();
- Localize();
- Init();
- UIUtils.CheckRTL(this);
- UpdateDpiDependencies();
- }
- }
- }
|