通过进度栏将数据加载到datagrid match中

时间:2018-11-06 11:46:28

标签: c# wpf datagrid

这是我到目前为止所拥有的:

        #region Method For Loading Data
    private async Task Loading(Func<string> SearchStringForUser)
    {
        ObservableCollection<VW_Users> collection = new ObservableCollection<VW_Users>();
        object @lock = new object();
        BindingOperations.EnableCollectionSynchronization(collection, @lock);
        DataGrid_User.ItemsSource = collection;
        await Task.Run(() =>
        {


            using (SqlConnection connection = new SqlConnection(PublicVar.ConnectionString))
            {
                SqlCommand command = new SqlCommand("select * From VW_Users where 1 = 1 And @GymID = @GymId", connection);
                command.Parameters.AddWithValue("@GymID", PublicVar.GymID + " " + SearchStringForUser());
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                {
                    const int N = 10;
                    VW_Users[] cache = new VW_Users[N];
                    int counter = 0;
                    while (reader.Read())
                    {
                        VW_Users obj = new VW_Users();
                        obj.UserID = Convert.ToInt32(reader["UserID"]);
                        obj.UserName = Convert.ToString(reader["UserName"]);            
                        cache[counter] = obj;
                        //...and so on for each property...

                        if (++counter == N)
                        {
                            //add N items to the source collection
                            foreach (VW_Users x in cache)
                            {
                                collection.Add(x);


                            } 
                            counter = 0;
                            this.Dispatcher.InvokeAsync(() => {
                                MyProg.Value += 20;
                            });

                            ////add a delay so you actually have a chance to see that N items are added at a time
                               System.Threading.Thread.Sleep(500);
                        }
                    }
                    //add any remaining items
                    for (int i = 0; i < counter; ++i)
                    {
                        collection.Add(cache[i]);

                    }

                }
                reader.Close();
            }

        });

    }
    #endregion

它正在等待将数据加载到我的datagrid中,现在我有两个问题 我如何使图像旋转360度,例如加载图像... 我重要的问题是如何通过进度栏显示加载的数据 例如,当加载10%的数据时,进度条值将获得10%,进度条完成后将获得100%。我在我的代码中将进度条称为“ MyProg”,但它不能正常工作。最好的主意是什么?

1 个答案:

答案 0 :(得分:0)

  

我如何按进度条显示已加载的数据,例如加载进度条的值获得100%时进度条值的10%获得10%时获得的数据?

在您阅读完查询之前,您不知道查询将返回多少行,因此就当前的实现而言,您无法知道已经处理了10%的行。不过,您可能需要使用ProgressBar属性设置为IsIndeterminate的{​​{1}}。

@bommelding指出,您可能还想考虑使用true类的异步API,而不是使用SqlDataReaderhttps://blogs.msdn.microsoft.com/adonet/2012/07/15/using-sqldatareaders-new-async-methods-in-net-4-5-part-2-examples/

  

如何像加载图像一样使图像旋转360度?

给出如下添加到XAML标记中的Task.Run元素:

Image

..您可以将其<Image x:Name="image" Source="image.png" /> LayoutTransform属性设置为要设置动画的RenderTransform

RotateTransform