Tôi có vẻ là sự hiểu lầm về phương thức ListBox.Refresh() và tôi hy vọng ai đó có thể giúp tôi.ListBox đã đặt nguồn dữ liệu nhưng Làm mới không có gì
Điều tôi đang cố gắng làm:
Tôi muốn tải dữ liệu của hộp danh sách (nguồn = bảng của cơ sở dữ liệu sql) khi khởi tạo biểu mẫu cửa sổ. Ngoài ra khi người dùng thêm dữ liệu vào cơ sở dữ liệu, tôi muốn hộp danh sách cập nhật.
Logic:
Tôi có một cơ sở dữ liệu sql như nguồn của tôi, nó được thiết lập như:
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
DBquery.informationRetreval() là một phương pháp tĩnh trong lớp tĩnh DBQuery tôi. Tất cả những gì nó làm là thiết lập một bảng từ cơ sở dữ liệu và sau đó trả về bảng.
tôi đặt nguồn dữ liệu trong cùng một phương pháp như InitializeComponent (để listbox của tôi sẽ được tải với các dữ liệu hiện có):
public Settings()
{
InitializeComponent();
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
}
Khi người dùng thêm nhiều dữ liệu hơn: Tôi gọi một phương thức trong đó tôi thêm dữ liệu vào cơ sở dữ liệu và sau đó tôi gọi:
listBoxDays.Refresh(); //update listbox
Vấn đề: Điều này không cập nhật hộp danh sách. Khi khởi tạo hộp danh sách của tôi, dữ liệu sẽ cư trú nhưng sau khi nó sẽ không thay đổi (do đó làm mới không hoạt động). Tại sao vậy? Tôi có thể thiết lập DataSource một lần nữa nhưng điều đó cảm thấy cẩu thả. Sau khi xem xét một số tài liệu tôi nhận thấy trình xử lý sự kiện DataSourceChanged có thể nhiều hơn cho những gì tôi đang tìm kiếm. Tuy nhiên tại sao không làm mới?
Cảm ơn sự kiên nhẫn của bạn. Vui lòng cho tôi biết nếu tôi cần rõ ràng hơn.
Có ý nghĩa hơn khi sử dụng trình xử lý sự kiện: ListControl.DataSourceChanged ... xảy ra khi nguồn dữ liệu thay đổi không? – 40Alpha
Tôi sẽ nói để tạo một phương thức sẽ làm sạch và liên kết điều khiển và gọi nó từ InitializeComponent() và từ mọi nơi khác bạn đang sử dụng hàm .Refresh(). –
Ngoài ra, ít nhất là trong phiên bản VB tôi đang làm việc với tôi có một lỗi nói rằng bạn không thể xóa các mục khi dữ liệu bị ràng buộc vào một nguồn dữ liệu. Tất cả những gì tôi phải thêm vào là thêm một dòng mà 'Listbox.DataSource = Nothing' đã nói và sau đó xóa các mục của tôi và rebind dữ liệu của tôi – PsychoData