Beispiel #1
0
        private void queryBuilder1_QueryElementControlCreated(QueryElement queryElement,
                                                              IQueryElementControl queryElementControl)
        {
            if (queryElementControl is IQueryColumnListControl)
            {
                var          queryColumnListControl = (IQueryColumnListControl)queryElementControl;
                DataGridView dataGridView           = (DataGridView)queryColumnListControl.DataGrid;

                _customColumn?.Dispose();

                // Create custom column
                _customColumn = new DataGridViewTextBoxColumn
                {
                    Name = "CustomColumn", HeaderText = "Custom Column", Width = 200, ValueType = typeof(string)
                };
                _customColumn.HeaderCell.Style.Font = new Font("Tahoma", 8, FontStyle.Bold);

                // Insert custom column to specified position
                dataGridView.Columns.Insert(2, _customColumn);

                // Handle requierd events
                dataGridView.CellBeginEdit   += DataGridView_CellBeginEdit;
                dataGridView.CellValueNeeded += DataGridView_CellValueNeeded;
                dataGridView.CellValuePushed += DataGridView_CellValuePushed;
            }
        }
Beispiel #2
0
        private void QBuilder_OnQueryElementControlDestroying(QueryElement owner, IQueryElementControl control)
        {
            if (QElementDestroying.IsChecked != true)
            {
                return;
            }

            BoxLogEvents.Text = "QueryElementControl Destroying \"" + control.GetType().Name + "\"" +
                                Environment.NewLine + BoxLogEvents.Text;
        }
Beispiel #3
0
        private void queryBuilder1_QueryElementControlDestroying(QueryElement queryElement,
                                                                 IQueryElementControl queryElementControl)
        {
            if (queryElementControl is IQueryColumnListControl)
            {
                var          queryColumnListControl = (IQueryColumnListControl)queryElementControl;
                DataGridView dataGridView           = (DataGridView)queryColumnListControl.DataGrid;

                // remove event handlers to avoid memory leaking
                dataGridView.CellBeginEdit   -= DataGridView_CellBeginEdit;
                dataGridView.CellValueNeeded -= DataGridView_CellValueNeeded;
                dataGridView.CellValuePushed -= DataGridView_CellValuePushed;
            }
        }
Beispiel #4
0
        private void QBuilder_QueryElementControlCreated(QueryElement owner, IQueryElementControl control)
        {
            if (QElementCreated.Checked != true)
            {
                return;
            }

            TextBoxReport.Text = "QueryElementControl Created \"" + control.GetType().Name + "\"" +
                                 Environment.NewLine + TextBoxReport.Text;

            if (control is DataSourceControl)
            {
                var cont = (DataSourceControl)control;
                cont.FieldListDrawItem += cont_FieldListDrawItem;
            }
        }
Beispiel #5
0
        private void QBuilder_QueryElementControlDestroying(QueryElement owner, IQueryElementControl control)
        {
            if (QElementDestroying.Checked != true)
            {
                return;
            }
            TextBoxReport.Text = "QueryElementControl Destroying \"" + control.GetType().Name + "\"" +
                                 Environment.NewLine + TextBoxReport.Text;

            if (!(control is DataSourceControl))
            {
                return;
            }

            var cntr = (DataSourceControl)control;

            cntr.FieldListDrawItem -= cont_FieldListDrawItem;
        }
Beispiel #6
0
        private void QueryBuilder1_OnQueryElementControlCreated(QueryElement owner, IQueryElementControl control)
        {
            if (!(control is IQueryColumnListControl))
            {
                return;
            }

            var queryColumnListControl = (IQueryColumnListControl)control;
            var dataGridView           = (DataGrid)queryColumnListControl.DataGrid;

            // Create custom column
            var customColumn = new DataGridComboBoxColumn()
            {
                Header      = "Custom Column",
                Width       = new DataGridLength(200),
                HeaderStyle =
                    new Style
                {
                    Setters =
                    {
                        new Setter(FontFamilyProperty, new FontFamily("Tahoma")),
                        new Setter(FontWeightProperty, FontWeights.Bold)
                    }
                },
                ItemsSource = _customValuesProvider,

                // Bind this column to the QueryColumnListItem.CustomData object, which is expected to be a string.
                SelectedItemBinding = new Binding("CustomData")
                {
                    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                }
            };

            // Insert new column to the specified position
            dataGridView.Columns.Insert(2, customColumn);

            // Handle the necessary events
            dataGridView.BeginningEdit  += DataGridView_BeginningEdit;
            dataGridView.CellEditEnding += DataGridView_CellEditEnding;
            dataGridView.LoadingRow     += dataGridView_LoadingRow;
        }
        private void QueryBuilder1_OnQueryElementControlCreated(QueryElement owner, IQueryElementControl control)
        {
            if (control is IQueryColumnListControl)
            {
                var queryColumnListControl = (IQueryColumnListControl)control;
                var dataGridView           = (DataGrid)queryColumnListControl.DataGrid;

                // Create custom column
                var customColumn = new DataGridCheckBoxColumn()
                {
                    Header      = "Custom Column",
                    Width       = new DataGridLength(200),
                    HeaderStyle =
                        new Style
                    {
                        Setters =
                        {
                            new Setter(FontFamilyProperty, new FontFamily("Tahoma")),
                            new Setter(FontWeightProperty, FontWeights.Bold)
                        }
                    },
                    // Bind this column to the CustomData field of the QueryColumnListItem model, which is expected to be boolean
                    Binding = new Binding("CustomData")
                    {
                        Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                    },
                    IsThreeState = false
                };

                // Insert new column to the specified position
                dataGridView.Columns.Insert(2, customColumn);

                // Handle the necessary events
                dataGridView.BeginningEdit  += DataGridView_BeginningEdit;
                dataGridView.CellEditEnding += dataGridView_CellEditEnding;
                dataGridView.LoadingRow     += dataGridView_LoadingRow;
            }
        }
Beispiel #8
0
        private void queryBuilder1_QueryElementControlCreated(QueryElement queryElement, IQueryElementControl queryElementControl)
        {
            if (queryElementControl is IQueryColumnListControl)
            {
                IQueryColumnListControl queryColumnListControl = (IQueryColumnListControl)queryElementControl;
                DataGridView            dataGridView           = (DataGridView)queryColumnListControl.DataGrid;

                _customColumn?.Dispose();

                // Create custom column
                _customColumn = new DataGridViewCheckBoxColumn
                {
                    Name               = "CustomColumn",
                    HeaderText         = "Custom Column",
                    Width              = 100,
                    FlatStyle          = FlatStyle.Standard,
                    ValueType          = typeof(CheckState),
                    TrueValue          = CheckState.Checked,
                    FalseValue         = CheckState.Unchecked,
                    IndeterminateValue = CheckState.Indeterminate
                };

                _customColumn.HeaderCell.Style.Font = new Font("Tahoma", 8, FontStyle.Bold);

                // Insert custom column to specified position
                dataGridView.Columns.Insert(2, _customColumn);

                // Handle required events
                dataGridView.CellBeginEdit   += DataGridView_CellBeginEdit;
                dataGridView.CellValueNeeded += DataGridView_CellValueNeeded;
                dataGridView.CellValuePushed += DataGridView_CellValuePushed;
            }
        }
Beispiel #9
0
        private void queryBuilder1_QueryElementControlCreated(QueryElement queryElement, IQueryElementControl queryElementControl)
        {
            if (queryElementControl is IQueryColumnListControl)
            {
                IQueryColumnListControl queryColumnListControl = (IQueryColumnListControl)queryElementControl;
                DataGridView            dataGridView           = (DataGridView)queryColumnListControl.DataGrid;

                _customColumn?.Dispose();

                // Create custom column
                _customColumn = new ComboBoxWithButtonColumn
                {
                    Name         = "CustomColumn",
                    HeaderText   = "Custom Column",
                    Width        = 200,
                    DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing, // hide the combobox if cell is not focused
                    ValueType    = typeof(string)
                };

                _customColumn.HeaderCell.Style.Font = new Font("Tahoma", 8, FontStyle.Bold);
                _customColumn.ShowButton            = true;

                // Insert custom column to specified position
                dataGridView.Columns.Insert(2, _customColumn);

                // Handle requierd events
                dataGridView.CellEnter             += DataGridView_CellEnter;
                dataGridView.CellLeave             += DataGridView_CellLeave;
                dataGridView.CellBeginEdit         += DataGridView_CellBeginEdit;
                dataGridView.CellValueNeeded       += DataGridView_CellValueNeeded;
                dataGridView.CellValuePushed       += DataGridView_CellValuePushed;
                dataGridView.EditingControlShowing += DataGridView_EditingControlShowing;
            }
        }
Beispiel #10
0
        private void QueryBuilder1_OnQueryElementControlCreated(QueryElement queryElement, IQueryElementControl queryElementControl)
        {
            if (!(queryElementControl is IQueryColumnListControl))
            {
                return;
            }

            var queryColumnListControl = (IQueryColumnListControl)queryElementControl;
            var dataGridView           = (DataGrid)queryColumnListControl.DataGrid;

            // Create custom column
            var customColumn = new DataGridTextColumn
            {
                Header      = "Custom Column",
                Width       = new DataGridLength(200),
                HeaderStyle =
                    new Style
                {
                    Setters =
                    {
                        new Setter(FontFamilyProperty, new FontFamily("Tahoma")),
                        new Setter(FontWeightProperty, FontWeights.Bold)
                    }
                },
                // Bind this column to the QueryColumnListItem.CustomData object, which must contain an object with the Description field (defined below)
                Binding = new Binding("CustomData.Description")
                {
                    Mode = BindingMode.TwoWay, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                }
            };

            // Insert new column to the specified position
            dataGridView.Columns.Insert(2, customColumn);

            // Handle the necessary events
            dataGridView.BeginningEdit  += dataGridView_BeginningEdit;
            dataGridView.CellEditEnding += dataGridView_CellEditEnding;
            dataGridView.LoadingRow     += dataGridView_LoadingRow;
        }
Beispiel #11
0
        private void QueryBuilder1_OnQueryElementControlCreated(QueryElement owner, IQueryElementControl control)
        {
            if (!(control is IQueryColumnListControl))
            {
                return;
            }

            var queryColumnListControl = (IQueryColumnListControl)control;
            var dataGridView           = (DataGrid)queryColumnListControl.DataGrid;

            // Create binding and templates for the custom column
            var textBlock = new FrameworkElementFactory(typeof(TextBlock));

            textBlock.SetValue(VerticalAlignmentProperty, VerticalAlignment.Center);
            textBlock.SetValue(MarginProperty, new Thickness(2, 0, 0, 0));
            textBlock.SetBinding(TextBlock.TextProperty,
                                 new Binding("CustomData")
            {
                Mode = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            });


            // Creating a template to browse a cell
            var templateCell = new DataTemplate {
                VisualTree = textBlock
            };

            var columnLeft = new FrameworkElementFactory(typeof(ColumnDefinition));

            columnLeft.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Star));

            var columnRight = new FrameworkElementFactory(typeof(ColumnDefinition));

            columnRight.SetValue(ColumnDefinition.WidthProperty, new GridLength(1, GridUnitType.Auto));

            var gridRoot = new FrameworkElementFactory(typeof(Grid));

            gridRoot.SetValue(BackgroundProperty, Brushes.White);
            gridRoot.AppendChild(columnLeft);
            gridRoot.AppendChild(columnRight);

            var comboBox = new FrameworkElementFactory(typeof(ComboBox));

            comboBox.SetBinding(Selector.SelectedItemProperty,
                                new Binding("CustomData")
            {
                Mode = BindingMode.TwoWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            });
            comboBox.SetValue(ItemsControl.ItemsSourceProperty, _customValuesProvider);
            comboBox.SetValue(MarginProperty, new Thickness(0, 0, 0, 0));
            comboBox.SetValue(BorderThicknessProperty, new Thickness(0));
            comboBox.SetValue(VerticalContentAlignmentProperty, VerticalAlignment.Center);
            comboBox.SetValue(Grid.ColumnProperty, 0);
            comboBox.SetValue(PaddingProperty, new Thickness(1, 0, 0, 0));

            // Defining a handler which is fired on loading the editor for a cell
            comboBox.AddHandler(LoadedEvent, new RoutedEventHandler(LoadComboBox));
            gridRoot.AppendChild(comboBox);

            var button = new FrameworkElementFactory(typeof(Button));

            button.SetValue(Grid.ColumnProperty, 1);
            button.SetValue(MarginProperty, new Thickness(2));
            button.SetValue(ContentProperty, "...");
            button.SetValue(VerticalAlignmentProperty, VerticalAlignment.Center);
            button.SetValue(VerticalContentAlignmentProperty, VerticalAlignment.Center);
            button.SetValue(WidthProperty, 16.0);

            // Defining a handler of cliking the ellipsis button in a cell
            button.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(ClickButton));
            gridRoot.AppendChild(button);

            // Creating a template to edit the custom cell
            var templateCellEdit = new DataTemplate {
                VisualTree = gridRoot
            };

            var customColumn = new DataGridTemplateColumn()
            {
                Header      = "Custom Column",
                Width       = new DataGridLength(200),
                HeaderStyle =
                    new Style
                {
                    Setters =
                    {
                        new Setter(FontFamilyProperty, new FontFamily("Arial")),
                        new Setter(FontWeightProperty, FontWeights.Bold)
                    }
                },
                // assigning templates to a column
                CellTemplate        = templateCell,
                CellEditingTemplate = templateCellEdit
            };

            // Insert new column to the specified position
            dataGridView.Columns.Insert(2, customColumn);

            // Handle the necessary events
            dataGridView.BeginningEdit  += DataGridView_BeginningEdit;
            dataGridView.CellEditEnding += dataGridView_CellEditEnding;
            dataGridView.LoadingRow     += dataGridView_LoadingRow;
        }
Beispiel #12
0
        private void QBuilder_OnQueryElementControlCreated(QueryElement owner, IQueryElementControl control)
        {
            if (QElementCreated.IsChecked != true)
            {
                return;
            }

            BoxLogEvents.Text = "QueryElementControl Created \"" + control.GetType().Name + "\"" +
                                Environment.NewLine + BoxLogEvents.Text;

            if (!(control is DataSourceControl))
            {
                return;
            }

            var dsc     = (DataSourceControl)control;
            var element = (UserControl)control;

            var root = (Grid)element.FindName("PART_CONTENT");    // Grid
            var list = (ListView)element.FindName("ListBoxView"); // ListView

            if (root == null || list == null)
            {
                return;
            }

            var customItemTemplate = (DataTemplate)FindResource("CustomFieldTemplate");

            list.ItemTemplate = customItemTemplate;
            list.SetValue(Grid.RowProperty, 1);

            var border = new Border
            {
                BorderThickness = new Thickness(0, 0, 0, 1),
                BorderBrush     = Brushes.Gray,
                Background      = SystemColors.InfoBrush
            };

            var grid = new Grid
            {
                Margin            = new Thickness(3, 0, 3, 0),
                Height            = 24,
                VerticalAlignment = VerticalAlignment.Center
            };

            border.SetValue(Grid.RowProperty, 0);

            border.Child = grid;
            root.Children.Add(border);

            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(1, GridUnitType.Star)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = GridLength.Auto
            });

            #region Search box and button
            var textSearchBox = new TextBox
            {
                VerticalContentAlignment = VerticalAlignment.Center,
                VerticalAlignment        = VerticalAlignment.Center,
            };

            var buttonSearchClear = new Button
            {
                Content                  = "X",
                FontSize                 = 10,
                Padding                  = new Thickness(5, 0, 5, 0),
                VerticalAlignment        = VerticalAlignment.Center,
                Margin                   = new Thickness(3, 0, 0, 0),
                VerticalContentAlignment = VerticalAlignment.Center,
                IsEnabled                = false
            };

            textSearchBox.SetValue(Grid.ColumnProperty, 0);

            // Filtering the list of fields in the DataSourceControl
            textSearchBox.TextChanged += delegate
            {
                list.Items.Filter =
                    x =>
                {
                    var dataSourceControlItem = x as DataSourceControlItem;
                    return(dataSourceControlItem != null && dataSourceControlItem.Name.Text.ToLower().Contains(textSearchBox.Text.ToLower()));
                };
                buttonSearchClear.IsEnabled = !string.IsNullOrWhiteSpace(textSearchBox.Text);

                dsc.Refresh();
            };

            grid.Children.Add(textSearchBox);

            buttonSearchClear.Click += (sender, args) => textSearchBox.Text = "";

            buttonSearchClear.SetValue(Grid.ColumnProperty, 1);
            #endregion
            grid.Children.Add(buttonSearchClear);
        }