В моем приложении мне нужно открыть мастер 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;
}
}
}