Как показать мастер Query Builder в отдельном окне? - PullRequest
0 голосов
/ 22 апреля 2020

В моем приложении мне нужно открыть мастер Query Builder в отдельном окне или диалоге, где пользователь может создать запрос при закрытии мастера, я хочу создать SQL. Я создал фиктивное приложение, но когда я использую диалог show, я получаю исключение "System.ArgumentNullException: 'Value cannot be null.'". Пожалуйста, помогите мне исправить это.

using DevExpress.Data;
using DevExpress.DataAccess.ConnectionParameters;
using DevExpress.DataAccess.Native.Sql.QueryBuilder;
using DevExpress.DataAccess.Sql;
using DevExpress.DataAccess.Wizard.Services;
using DevExpress.Mvvm;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.ExpressionEditor;
using System.Linq;
using System.Windows;

namespace QueryBuilderExample
{
    public class MainWindowViewModel : ViewModelBase
    {
        public virtual string Query { get; set; }

        public void OnEditQuery()
        {
            SqlDataSource sqlDataSource = new SqlDataSource(new MsSqlConnectionParameters("server", "db", "user", "Pass", MsSqlAuthorizationType.SqlServer));
            sqlDataSource.Connection.Open();

            var queryModel = new QueryBuilderModel(new SelectQuery());
            var viewModel = new QueryBuilderViewModel(queryModel);
            viewModel.Initialize(
                new DBSchemaProviderEx(),
                sqlDataSource.Connection.GetDBSchema(),
                sqlDataSource.Connection,
                Enumerable.Empty<IParameter>(),
                new CustomQueryValidator(),
                ExpressionEditorContextHelper.GetContext(true, true));

            var queryBuilderDialogService = GetService<IDialogService>();
            var commands = UICommand.GenerateFromMessageBoxButton(MessageBoxButton.OKCancel, new DXDialogWindowMessageBoxButtonLocalizer());
            var resultCommand = queryBuilderDialogService.ShowDialog(commands, "Query Builder", "Text", viewModel);
            if (!resultCommand.IsCancel)
            {
                Query = viewModel.SqlText;
            }
        }
    }

    internal class CustomQueryValidator : ICustomQueryValidator
    {
        public CustomQueryValidator()
        {
        }

        bool ICustomQueryValidator.Validate(DataConnectionParametersBase connectionParameters, string sql, ref string message)
        {
            //valdiate
            return true;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...