Hiển thị kết quả từ 1 đến 4 / 4
  1. #1
    Tham gia
    17-11-2004
    Bài viết
    131
    Like
    0
    Thanked 0 Times in 0 Posts

    Tại sao Biến tòan cục không thay đổi

    Chào các bạn mình thử khai báo lớp
    Public Class A
    {
    string sql= "SELECT INVOICENO, INVOICEDATE, NOTE, INVOICVETYPE, TERMCODE FROM dbo.INVOICE"
    datatable dt = new datatable();
    clsFunction f = new clsFunction();

    f.LoadGrid(sql, grd,dt);
    int i = dt.Rows.Count; // khong hieu sao khi chay doi tuong dt o dong nay lai null mặc dù đã load được dư liệu lên lưới?
    }

    class clsFunction
    {
    public void LoadGrid(string sql, System.Windows.Forms.DataGridView grd, System.Data.DataTable dt)
    {

    SLSWS.Service objWS = new SLSWS.Service();
    objGen = new clsGeneral();
    objWS = objGen.connectWS(objWS);
    int i = 1;

    try
    {
    dt = objWS.getDTByCondition(sql, ref i);
    grd.Columns.Clear();
    grd.DataSource = dt;
    }
    catch { }
    grd.BackgroundColor = System.Drawing.Color.FloralWhite;
    grd.ReadOnly = true;

    }
    }

    Mong các bạn chi giúp.
    Quote Quote

  2. #2
    Tham gia
    10-03-2012
    Location
    Nha Trang
    Bài viết
    192
    Like
    3
    Thanked 33 Times in 31 Posts
    Null là bởi vì bạn không thay đổi gì cái dt cả. Bạn chỉ truyền một copy của dt vào LoadGrid, nói cách khác, mọi thay đổi của dt bên trong LoadGrid không ảnh hưởng gì đến dt bên ngoài LoadGrid.

    Bạn phải sửa lại như sau:
    public void LoadGrid(string sql, ref DataGridView grd, ref DataTable dt)


    f.LoadGrid(sql, ref grd,ref dt);
    0128.761.0660 - Nhân

  3. #3
    Tham gia
    15-03-2010
    Bài viết
    1,561
    Like
    84
    Thanked 1,571 Times in 860 Posts
    Để hiểu cách thay đổi đối tượng qua hàm, bạn cần biết cách phân biệt biến, đối tượng, tính chất đối tượng và thuộc tính của lớp.

    Toán tử gán (phép gán, dấu =) là toán tử gán đối tượng chứ không phải là hàm thay đổi thuộc tính đối tượng.

    dt = objWS.getDTByCondition(sql, ref i);

    Qua dòng lệnh này, hàm getDTByCondition của đối tượng objWS trả về một đối tượng dạng data table và gán cho biến dt.
    Vì bên trong hàm clsFunction, dt là tham được code gọi truyền cho hàm nên khi dứt hàm, biến dt trở về trị trước đó chứa trong ngăn xếp, tức là đối tượng null.

    Nếu bạn có cách nào đó để thay đổi thuộc tính của lớp đối tượng dt (ví dụ dt.thuocTinhA = triGiDo; ) thì bạn sẽ thấy sau khi kết thúc hàm, dt mang trị mới. Bởi vì ở đây dt không thay đổi, dòng lệnh trong ví dụ chỉ thay đổi thuộc tính thuocTinhA của nó.

  4. #4
    Tham gia
    17-11-2004
    Bài viết
    131
    Like
    0
    Thanked 0 Times in 0 Posts
    Cám ơn hai bạn nhiều.

Bookmarks

Quy định

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