Обновление данных Silverlight - PullRequest
0 голосов
/ 30 июля 2011

Итак, у меня есть сетка данных в Silverlight, связанная с WCF, которая заполняет список классов. Я в основном передаю параметр в запрос Linq. Когда я делаю второй запрос, я получаю двойные результаты, третий тройной и так далее. Что я могу сделать, чтобы при отправке вызова в службу я получил только один набор результатов. Я приложил свой код на случай, если он кому-нибудь поможет.

    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);

    }

1 Ответ

3 голосов
/ 30 июля 2011

Проблема в том, что вы создаете новый (дублирующий) обработчик событий каждый раз, когда нажимаете кнопку. Из-за наличия дополнительного события для каждого нажатия кнопки, вы получаете дополнительные наборы данных. Вам нужно создать свой метод Event.Completed вне события Button.Cliked.

Для уточнения:

    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);

        }

}
...