cuốn sách gpt4 ai đã làm

c# - Tại sao cái này hoạt động còn cái này thì không?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 11:43:24 25 4
mua khóa gpt4 Nike

    Mẫu công khai1()
{
InitializeComponent();
comboBox1.DisplayMember = "Tên";
comboBox1.ValueMember = "ID";
LoadUsersToComboBox();
}

PersonRepository peopleRepo = new PersonRepository();

khoảng trống riêng tư LoadUsersToComboBox()
{
comboBox1.DataSource = peopleRepo.FindAllPeople().ToList();
}

private void button2_Click(object sender, EventArgs e)
{
LoadUsersToComboBox();
}

Phương pháp này trước tiên sẽHộp tổ hợp có giá trị được tải nhưng không được tải trong các lần thử tiếp theo:

    khoảng trống riêng tư LoadUsersToComboBox()
{
comboBox1.DataSource = peopleRepo.FindAllPeople() /*Trả về IQueryable*/
}

Mỗi lần tôi gọi LoadUsersToComboBox() nó sẽ tải:

    khoảng trống riêng tư LoadUsersToComboBox()
{
comboBox1.DataSource = peopleRepo.FindAllPeople().ToList();
}

Tại sao cái đầu tiên chỉ tải lần đầu tiên?

Đây là mã cho lớp PeopleRepository:

không gian tên SQLite_Testing_Grounds
{
lớp công khai PersonRepository
{
ScansEntities3 riêng tư db = ScansEntities3 mới();

công khai IQueryable FindAllPeople()
{
trả về db.People;
}
}
}

câu trả lời hay nhất

Giải pháp rất đơn giản:

// Phương thức này trả về cùng một tham chiếu mỗi lần
công khai IQueryable FindAllPeople()
{
trả về db.People;
}

kết quả:

// Không có gì thay đổi, giá trị cũ của DataSource vẫn giữ nguyên (cùng tham chiếu,
// ngay cả khi nội dung của danh sách Người thay đổi).
comboBox1.DataSource = peopleRepo.FindAllPeople();

// ToList() mỗi lần tạo một đối tượng mới, do đó DataSource được gán cho một đối tượng
// Đối tượng MỚI và do đó gọi là một kiểu vô hiệu hóa hình ảnh của nó.
comboBox1.DataSource = peopleRepo.FindAllPeople().ToList();

.
Đây là những điều cơ bản về ràng buộc dữ liệu, tôi thực sự không phải là người WinForms (tôi biết nhiều hơn về WPF), nhưng tôi nghĩ trong nội bộ bạn có một cái gì đó như:

nguồn dữ liệu đối tượng riêng tư;
đối tượng công cộng DataSource {
get {
if (giá trị != dataSource) {
dataSource = giá trị;
RaisePropertyChanged("DataSource");
}
}
}

Về c# - tại sao cái này hoạt động còn cái này thì không? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/4052221/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress