C#安装项目的连接UI.Dialog

5

enter image description here

我在我的项目中添加了 Microsoft.Data.ConnectionUI.Dialog.dll 和 Microsoft.Data.ConnectionUI.dll 这两个dll文件,并使用以下代码:

    Microsoft.Data.ConnectionUI.DataConnectionDialog dcd = new Microsoft.Data.ConnectionUI.DataConnectionDialog();

        Microsoft.Data.ConnectionUI.DataSource.AddStandardDataSources(dcd);

        if (Microsoft.Data.ConnectionUI.DataConnectionDialog.Show(dcd) == System.Windows.Forms.DialogResult.OK)
        {
            //
        }
        else
        {
            //
        }

当我在普通的Windows应用程序中使用它时,一切似乎都很正常(显示标准的VS数据连接对话框和高级按钮)。但是当我在安装项目中使用时,它只显示高级对话框,而“确定”按钮被禁用。用户可以测试连接,但无法按“确定”按钮。

有人知道为什么这不起作用吗?


你尝试以管理员权限运行安装程序了吗?如果你是在VS中运行的,关闭VS并以管理员身份重新启动它。 - Jethro
VS以管理员身份运行,我刚尝试以管理员身份重新运行设置,但没有任何区别 :( - Armen Khachatryan
您正在使用哪个版本的ConnectionUI.dll程序集?您是否在设置和Windows项目中引用了相同的程序集? - Phil
@ArmenKhachatryan,你有没有看到我的回答?当连接字符串填写正确时,确定按钮会变为可用状态。 - Jeremy Thompson
3个回答

2
根据设置,按钮将被启用/禁用。 在这篇文章中:http://erikej.blogspot.com.au/2010/04/using-adonet-data-connection-dialog-in.html,作者“硬编码”数据源,这导致“更改”按钮被禁用。
当您设置数据源名称时,应该启用“确定”按钮。我挖掘了 Data Connection Dialog Source Code 代码,向您展示: http://archive.msdn.microsoft.com/Connection/Release/ProjectReleases.aspx?ReleaseId=3863 在 Micrsost.Data.ConnectionUI.Dialog 项目中,打开 DataConnectionDialog.cs 类,你可以看到这是事件:
private void ConfigureAcceptButton(object sender, EventArgs e)
{
try
{
acceptButton.Enabled = (ConnectionProperties != null) ? ConnectionProperties.IsComplete : false;
}
catch
{
acceptButton.Enabled = true;
}
}

上述事件是从ConnectionProperties方法中挂钩并在每次PropertyChange事件触发时调用的:
properties.PropertyChanged += new EventHandler(ConfigureAcceptButton);

为了启用“确定”按钮,你需要满足ConnectionProperties.IsComplete条件。

1

当我从PowerPoint插件运行DataConnectionDialog时,遇到了与您相同的问题。

问题在于SqlConnectionUIControl必须在STA线程中运行。以下是我成功运行的代码。

单击“加载”按钮,在线程中启动数据连接器。

private void dataSourceSelectionButton_Click(object sender, EventArgs e)
{
  Thread browseThread = new Thread(promptForConnectionString);
  browseThread.TrySetApartmentState(ApartmentState.STA);
  browseThread.Start();  
}

打开对话框。

public string ConnectionString { get; set; }

private void promptForDataConnection()
{
  DataConnectionDialog dataConnection = new DataConnectionDialog();
  DataConnectionConfiguration connectionConfiguration = new DataConnectionConfiguration(null);
  connectionConfiguration.LoadConfiguration(dataConnection);

  if (DataConnectionDialog.Show(dataConnection) == DialogResult.OK)
  {
    connectionConfiguration.SaveConfiguration(dataConnection);

    this.ConnectionString = dataConnection.ConnectionString;
  }
}

如果这不起作用,可以尝试使用DataConnectionDialog Source

0

我无法通过以管理员身份运行VS2008来解决这个问题。我通过在Winform项目中禁用“启用Visual Studio托管进程”选项来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接