Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Hiển thị thông báo "Loading ...." Khi đang truy vấn từ SQL server

  1. #1
    Ngày gia nhập
    05 2011
    Bài viết
    27

    Question Hiển thị thông báo "Loading ...." Khi đang truy vấn từ SQL server

    Mình có tìm hiều một số class như BackgroundWorker, MultiThread.... nhưng vẫn chưa hiểu được cách áp dụng cho trường hợp sau đây của mình.

    Bài toán của mình như sau : Mình có 2 form :
    - 1 form chứa datagrid để show dữ liệu và 1 nút Search
    - 1 form hiện câu thông báo : "Loading...."

    Mình muốn hiện thông báo Loading... khi bấm nút Search(để thông báo đang load dữ liệu). Tuy nhiên mình chưa làm được.

    Mình đã thử cách đơn giản là : gọi form thông báo trước form chứa dữ liệu nhưng không được( Vì khi bấm Search là cả form bị đứng -> do dữ liệu mình tìm khá lớn và lâu khoảng 5 phút ).

    Vậy mình nên xài class nào cho vấn đề này.

  2. #2
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà nội
    Bài viết
    210

    sử dụng thread .
    Khi ấn nút search thì thread bắt đầu start
    đến khi thread.Join() && trả về kết quả (=1 cái cờ bool nào đó)
    tắt Loading
    Hiện
    Quá yêu em khiến em xem
    Đó như là sơ hở
    Em điểu khiển và biến tôi thành 1 thằng khở

  3. #3
    Ngày gia nhập
    05 2011
    Bài viết
    27

    Mình viết như sau nhưng nó không hiện cái form loading .
    Code:
    public partial class Frm_Precal :
        {
            Thread t1 = new Thread(new ThreadStart(MethodA));
                    
            public Frm_Precal()
            {
                InitializeComponent();
                 
            }
            static void MethodA()
            {
                Frm_Loading frm = new Frm_Loading(); // Form chứa label :" Loading...."
                frm.Show();
            }
    private void buttonX1_Click(object sender, EventArgs e)
            {
                if (this.tabItem1.IsSelected == true)
                {
                    t1.Start();
         // Cái store phía dưới chạy khoảng 5 phút mới xong(do dữ liệu nhiều) 
         // Khi chạy thì nó làm form bị treo khi nào xong thì hết treo
                    SqlDataAdapter da = new SqlDataAdapter();
                    da = Assql.ExecuteDataAdapter("spFGActValuation_2011", CommandType.StoredProcedure,
                                                "@Start", this.dateTimeInput1.Value,
                                                "@End", this.dateTimeInput2.Value);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
    
                    dataGridViewX1.DataSource = ds.Tables[0];
                    
                    
                }
    }
    Sao để vô tag CODE mà hem rõ vậy hen :(.

  4. #4
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà nội
    Bài viết
    210

    Mình viết như sau nhưng nó không hiện cái form loading .
    Code:
    public partial class Frm_Precal :
        {
    
                    
            public Frm_Precal()
            {
                InitializeComponent();
                 
            }
            static void MethodA()
            {
                    SqlDataAdapter da = new SqlDataAdapter();
                    da = Assql.ExecuteDataAdapter("spFGActValuation_2011",    CommandType.StoredProcedure,@Start", this.dateTimeInput1.Value,"@End",this.dateTimeInput2.Value);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    dataGridViewX1.DataSource = ds.Tables[0];
            
            }
    private void buttonX1_Click(object sender, EventArgs e)
            {
                if (this.tabItem1.IsSelected == true)
                {    
                     Thread t1 = new Thread(new ThreadStart(MethodA));
                     t1.Start();
                     Frm_Loading frm = new Frm_Loading(); // Form chứa label :" Loading...."
                     frm.Show();
                     t1.Join();//đợi đến khi luồng kết thúc thì Hide nó đi
                     frm.Hide();
                }
    }
    Tạo luồng là để load dữ liệu chứ ko pải để hiện form , bạn thử xem , mình chưa test đâu
    Quá yêu em khiến em xem
    Đó như là sơ hở
    Em điểu khiển và biến tôi thành 1 thằng khở

  5. #5
    Ngày gia nhập
    12 2010
    Bài viết
    683

    Haha! theo mềnh thì cho 1 cái progressbar vô set value, 100% ---> run

  6. #6
    Ngày gia nhập
    05 2011
    Bài viết
    27

    Mặc định Hiển thị thông báo "Loading ...." Khi đang truy vấn từ SQL server

    Cám ơn bạn. Mình có thử lại nhưng khi mình để
    Code:
    public void MethodA()
            {
                Frm_Process frm = new Frm_Process();
                frm.Show();
    
                SqlDataAdapter da = new SqlDataAdapter();
                da = Assql.ExecuteDataAdapter("spFGActValuation_2011", CommandType.StoredProcedure,
                                                "@StartDate", this.dateTimeInput1.Value,
                                                "@EndDate", this.dateTimeInput2.Value);
                //da =Assql.ExecuteDataAdapter("SP_test", CommandType.StoredProcedure );
    
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                dataGridViewX1.DataSource = ds.Tables[0];
            }
    OK nhưng phần khai báo thread bị lỗi
    Code:
    Thread t1 = new Thread(new ThreadStart(MethodA));
    "A field initializer cannot reference non-static field ....". Mình hiểu nó bản MethodA phải là static.

    Nhưng nếu khai báo static cho Method thì cái DatagridX1( Mình dùng Dotnetbar) báo lỗi "An object reference is required for the non-static field....." ..

  7. #7
    Ngày gia nhập
    04 2009
    Bài viết
    108

    Dùng BackgroundWorker cho trường hợp của bạn là chuẩn rùi !!!
    Ai đã gieo vào lòng Ai nỗi nhớ
    Để vì Ai sóng vỗ những đêm dài
    Ai có biết vì Ai-Ai không ngủ
    Trằn trọc hoài nỗi nhớ của riêng Ai.

  8. #8
    Ngày gia nhập
    10 2007
    Bài viết
    66

    Bạn có thể xem ví dụ về BackgroundWorker. Nó có thể áp dụng cho trường hợp của bạn.
    http://csharpviet.tk/thu-thuat-cshar...r-trong-c.html
    Sống để code, chứ không code để sống!

Các đề tài tương tự

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Lỗi "To prevent possible data loss before loading the designer, the following errors must be resolved"
    Gửi bởi NguyenDuyPC trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 02-05-2013, 09:17 PM
  3. Trả lời: 3
    Bài viết cuối: 16-08-2011, 08:44 AM
  4. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM
  5. phân biệt "truy cập" và "truy nhập". Giúp em
    Gửi bởi Gryffindor trong diễn đàn Thắc mắc chung
    Trả lời: 6
    Bài viết cuối: 26-07-2010, 05:02 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn