2012-02-07 11 views
1

私は、この会社用に作成されたカスタムアプリケーションからログを表示するように書いたアプリケーションを持っています。私は、Entity Modelを使ってセットアップし、メニュー選択に基づいて、どのデータベース(テストデータベースまたは本番データベース)を動的に変更したいのですか? EntityConnectionStringBuilderを使用しようとしましたが、エラーなしで動作するようですが、データ接続文字列を変更した後に更新するアプリケーションの一覧を表示するグリッドを取得できません。 (テストと本番サーバー用の接続文字列がproperties.settingsに格納されている)ここで私がテストサーバーへの切り替えのために持っているものであるWPFを更新するページ

try 
{ 
    XDocument doc = XDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
    var query1 = from p in doc.Descendants("connectionStrings").Descendants() 
      select p; 
    foreach (var child in query1) 
    { 
    foreach (var atr in child.Attributes()) 
    { 
     if (atr.Name.LocalName == "name" && atr.Value == "AppsEntities") 
     if (atr.NextAttribute != null && atr.NextAttribute.Name == "connectionString") 
     { 
      EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(atr.NextAttribute.Value); 
      entityBuilder.ProviderConnectionString = Properties.Settings.Default["TestServer"].ToString(); 
      atr.NextAttribute.Value = entityBuilder.ToString(); 
     } 
    } 
    } 
    doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 
    lblDatabase.Content = "Connected to the Test Server"; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("changing connection string to Test - blew up!" + ex.Message, "massive error", MessageBoxButton.OK, MessageBoxImage.Exclamation); 
} 
すべてのヘルプは、私はWPFのように私はかもしれC#に新しいですし、高く評価されるだろう

これについて正しいことをしてはいけません。

<telerik:RadGridView x:Name="LogApplicationGrid" 
         Width="900" 
         Height="Auto" 
         Margin="2,53,0,0" 
         HorizontalAlignment="Left" 
         VerticalAlignment="Top" 
         AutoGenerateColumns="false" 
         GridLinesVisibility="Horizontal" 
         IsReadOnly="true" 
         MouseDoubleClick="LogApplicationGrid_MouseDoubleClick" 
         ShowGroupPanel="False"> 
     <telerik:RadGridView.Columns> 
      <telerik:GridViewDataColumn MaxWidth="50" 
             DataMemberBinding="{Binding AppID}" 
             Header="AppID" 
             IsFilterable="False" 
             UniqueName="appNumber" /> 
      <telerik:GridViewDataColumn MaxWidth="300" 
             DataMemberBinding="{Binding AppName}" 
             Header="Application Name" /> 
      <telerik:GridViewDataColumn MaxWidth="350" 
             DataMemberBinding="{Binding AppDesc}" 
             Header="Application Description" /> 
      <telerik:GridViewDataColumn MaxWidth="150" 
             DataMemberBinding="{Binding DateCreated}" 
             Header="Date Created" 
             IsFilterable="False" /> 
      <telerik:GridViewCheckBoxColumn MaxWidth="100" 
              DataMemberBinding="{Binding ShowInSharePoint}" 
              Header="SharePoint" 
              IsFilterable="False" /> 
     </telerik:RadGridView.Columns> 
    </telerik:RadGridView> 
+0

WTHコードが... –

+0

をフォーマットします接続が実際に切り替わることを確認した場合、これはデータバインディングの問題のように聞こえるので、彼は関連するXAMLとXAMLのための 'DataContext'です。 –

+0

私はそれが動作するようだ - ビジュアルスタジオdebogモードでは、エラーをキャッチしませんが、私はこれに慣れない領域にあります - App.configファイルは、それが役立つ場合は決して変更するようです。私はそれぞれの接続文字列を別々にアプリケーションを実行しているので、それぞれが動作するので、上記のコードまたはバインディングのいずれかであることに同意します。 – BradG

答えて

1

GridViewをObservableCollection<T>にバインドし、グリッドのデータを更新するには、コレクションを更新するだけです。

List<T>の代わりにObservableCollection<T>を使用します。これは、コレクションの変更時にUIを自動的に更新する必要があるためです。

また、設定する代わりに値をバインドしていることを確認してください。値を設定すると、実際のデータ自体ではなく、データのインスタンスに値が設定されるため、変更に応答しません。

例えば、これはUI

LogApplicationGrid = SomeCollection; 
SomeCollection = GetObservableCollection(); 

は更新されません。しかし、この意志

var b = new Binding(); 
b.Source = SomeCollection; 
LogApplicationGrid.SetBinding(RadGridView.ItemsSourceProperty, b); 

SomeCollection = GetObservableCollection(); 

、あなたが持っている場合は、このも

<telerik:RadGridView ItemsSource="{Binding SomeCollection}" ... /> 
+0

ありがとう応答。 _ObservableCollectionに変更されました _そして、コードラインを一歩一歩進んで、ConnectionStringが更新されていないことがわかりました。 – BradG

関連する問題