2012-05-02 49 views
5

enter image description here連接UI.Dialog對C#安裝項目

我添加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按鈕。

有誰知道爲什麼這不起作用?

+0

您是否嘗試過使用管理員權限運行安裝項目?如果你從VS內部運行,關閉VS並以管理員身份啓動它。 – Jethro

+0

VS作爲管理員運行,我剛剛嘗試重新設置爲管理員,並沒有區別:( –

+0

您正在使用哪個版本的ConnectionUI.dll程序集,並且您是從您的設置和Windows項目引用相同的程序集? – Phil

回答

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.IsCom完整的條件。

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託管進程」選項來解決此問題。