2011-07-29 9 views
0

私はSilverlightでクラスのリストを作成するWCFにバインドされたデータグリッドを持っています。私は基本的にLinqクエリにパラメータを渡します。 2番目のクエリを実行すると、結果が2倍になり、3番目のトリプルなどが得られます。サービスに電話をかけて1つの結果しか得られないときは、どうすればいいのですか。誰かを助ける場合に備えて私のコードを添付しました。Silverlight Datagrid Refresh

private void button1_Click(object sender, RoutedEventArgs e) 
    { 

     dgOrder.ItemsSource = null; 
     Uri address = new Uri(Application.Current.Host.Source, "../Services/Service1.svc"); 
     //var client = new Services.dataserviceClient("CustomBinding_dataservice", address.AbsoluteUri); 
     var client = new ServiceReference2.Service1Client("CustomBinding_Service1", address.AbsolutePath); 

     client.GetOrderCompleted += (s, ea) => 
      { 
       dgOrder.AutoGenerateColumns = false; 
       //dgOrder.ColumnWidth.Value = 100; 





       dgOrder.Columns.Add(CreateTextColumn("SKU", "SKU")); 
       dgOrder.Columns.Add(CreateTextColumn("productname", "Product Name")); 
       dgOrder.Columns.Add(CreateTextColumn("itemnumber", "Item Number")); 
       dgOrder.Columns.Add(CreateTextColumn("cost", "Cost")); 
       dgOrder.Columns.Add(CreateTextColumn("asin", "ASIN")); 
       dgOrder.Columns.Add(CreateTextColumn("pendingorder", "Rank")); 
       dgOrder.Columns.Add(CreateTextColumn("rank", "Node")); 
       //dgOrder.Columns.Add(CreateTextColumn("w4", "AMZN")); 
       dgOrder.Columns.Add(CreateTextColumn("amazon", "AMZN")); 
       dgOrder.Columns.Add(CreateTextColumn("ourprice", "OurPrice")); 
       dgOrder.Columns.Add(CreateTextColumn("bbprice", "BuyBox")); 
       dgOrder.Columns.Add(CreateTextColumn("afner", "AFN")); 
       dgOrder.Columns.Add(CreateTextColumn("quantity", "INV")); 
       dgOrder.Columns.Add(CreateTextColumn("w4", "W4")); 
       dgOrder.Columns.Add(CreateTextColumn("w3", "W3")); 
       dgOrder.Columns.Add(CreateTextColumn("w2", "W2")); 
       dgOrder.Columns.Add(CreateTextColumn("w1", "W1")); 
       dgOrder.Columns.Add(CreateTextColumn("order", "Order")); 
       dgOrder.Columns.Add(CreateTextColumn("total", "Total")); 
       dgOrder.Columns.Add(CreateTextColumn("profit", "Profit")); 
       dgOrder.Columns.Add(CreateTextColumn("percent", "Percent")); 
       dgOrder.Columns.Add(CreateHyperlink("asin")); 
       dgOrder.ItemsSource = ea.Result; 
       Original = ea.Result; 

      }; 
     client.GetOrderAsync(txtCompany.Text); 

    } 

答えて

3

問題は、ボタンを押すたびに新しい(重複した)イベントハンドラを作成することです。あなたはボタンごとに余分なイベントがあるので、余分なデータセットが得られます。 Button.Clikedイベントの外部にEvent.Completedメソッドを作成する必要があります。明確にするために

public partial class NewPage : Page 
    { 
     Uri address = new Uri(Application.Current.Host.Source, "../Services/Service1.svc"); 
     ServiceReference2.Service1Client client = new ServiceReference2.Service1Client("CustomBinding_Service1", address.AbsolutePath); 

     public NewPage() 
     { 
      client.GetOrderCompleted += (s, ea) => 
      { 
       //YOUR CODE 
      }; 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 

      dgOrder.ItemsSource = null; 
      client.GetOrderAsync(txtCompany.Text); 

     } 

} 
+0

あなたは、私がイベントに何をすべきかについて詳しく説明できますか? –

+0

編集.... – Tsabo

+0

は、varをクラスメンバーとして使用できないという唯一の問題です。 –