用于c#安装项目的连接UI.Dialog

时间:2012-05-02 14:11:51

标签: c# dialog connection

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数据连接对话框)。当我在SETUP PROJECT中使用它时,它只显示高级对话框并且禁用了OK按钮。用户可以测试连接,但无法按OK按钮。

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

3 个答案:

答案 0 :(得分:2)

根据设置启用/禁用按钮。

在本文中:http://erikej.blogspot.com.au/2010/04/using-adonet-data-connection-dialog-in.html作者“硬编码”了数据源,因此禁用了“更改”按钮。

设置DataSource名称时,应启用“确定”按钮。我挖出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 :(得分: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

答案 2 :(得分:0)

我无法通过将VS2008作为Admin运行来解决此问题。我通过禁用"启用Visual Studio托管过程来解决这个问题" Winform项目中的选项。