2009-05-27 6 views
7

Tôi có một DataGridView, không được đặt thành ReadOnly. Không có cột nào của nó được đặt thành ReadOnly và đối tượng mà nó nhất định không được đặt thành ReadOnly. Tuy nhiên, tôi không thể chỉnh sửa các mục DataGridView? Thuộc tính .DataSource của DataGridView được đặt thành ReadOnlyCollection <>, nhưng tôi có thể thay đổi các phần tử theo chương trình, không phải từ giao diện người dùng. Chuyện gì vậy?Tại sao tôi không thể chỉnh sửa các giá trị trong DataGridView của mình, mặc dù nó không được đặt thành ReadOnly?

+0

Bạn đang cố chỉnh sửa các phần tử như thế nào? Các hành vi mà bạn nghĩ bạn nên thấy là bạn không thấy gì? – David

Trả lời

9

Nó chỉ ra rằng nếu DataGridView của bạn được ràng buộc với một ReadOnlyCollection, sau đó mặc dù bạn có thể lập trình chỉnh sửa bất kỳ mục nào trong bộ sưu tập, DataGridView sẽ hạn chế bạn thay đổi các giá trị. Tôi không chắc chắn nếu hành vi này là cố ý, nhưng nó là một cái gì đó để xem ra cho.

+0

Không thể sao chép ... xem bên dưới. Với ReadOnlyCollection <> không ai có thể chỉnh sửa được ... –

+1

Tệ của tôi, nó chỉ ra rằng "một cột có thể được thay đổi" thực sự không được ràng buộc chính xác vào nguồn dữ liệu tất cả cùng. – GWLlosa

+1

+1 Tôi ước gì tôi đã tìm kiếm SO vào buổi sáng. Điều này đã cho tôi giờ đập đầu của tôi chống lại bức tường trước khi tôi figured nó ra. – Rytmis

3

Đây chỉ là một nhận xét mở rộng (do đó wiki) ngược lại với "DataGridView sẽ hạn chế bạn thay đổi một số giá trị (chuỗi) nhưng không phải các giá trị khác (bools)"; không thể chỉnh sửa được; làm cho nó là List<T> và cả hai đều có thể chỉnh sửa ...:

using System; 
using System.Collections.ObjectModel; 
using System.Windows.Forms; 
class Test 
{ 
    public string Foo { get; set; } 
    public bool Bar { get; set; } 

    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     var data = new ReadOnlyCollection<Test>(
      new[] { 
       new Test {Foo="abc", Bar=true}, 
       new Test {Foo="def", Bar=false}, 
       new Test {Foo="ghi", Bar=true}, 
       new Test {Foo="jkl", Bar=false}, 
      }); 
     Application.Run(
      new Form { 
       Text = "ReadOnlyCollection test", 
       Controls = { 
        new DataGridView { 
         Dock = DockStyle.Fill, 
         DataSource = data, 
         ReadOnly = false 
        } 
       } 
      }); 
    } 
} 
+0

Rất tiếc. Hóa ra rằng "một cột có thể chỉnh sửa" thực sự là một lỗi đánh máy trong mã dữ liệu, do đó, nó thực sự là "cột có thể chỉnh sửa mà không thực sự bị ràng buộc với nguồn dữ liệu toàn bộ thời gian.". – GWLlosa

2

Bạn liên kết với DataGridView của mình như thế nào? Một điều là nếu bạn đang sử dụng danh sách LINQ như nguồn dữ liệu được truy vấn từ cơ sở dữ liệu và bạn không có đối tượng hoàn chỉnh, thì thuộc tính chỉ đọc trừ khi bạn chỉ định "bằng mới" trong hàm chọn. Không có nhiều thông tin trong bài đăng của bạn. Tôi hi vọng cái này giúp được.

2

Tôi đã cài đặt VS 2013 chỉ ngày hôm qua, mới nhất xây dựng (Cập nhật 5) và một lỗi vẫn còn gây ra hành vi mà bạn mô tả.

Trong ngắn hạn để khắc phục lỗi, trước tiên hãy đảm bảo rằng chế độ xem dữ liệu được đặt thành GUI có thể chỉnh sửa. Điều này đặc biệt bao gồm mũi tên nhỏ trong trình thiết kế biểu mẫu ở trên cùng bên phải của điều khiển. Trong mũi tên thả xuống là một tùy chọn "cho phép chỉnh sửa", đảm bảo nó được kích hoạt. Bây giờ trong trình thiết kế biểu mẫu chỉnh sửa các cột theo một số cách chính (chẳng hạn như thêm hoặc xóa cột). Đó là nó, khi bạn chạy chương trình, bạn sẽ thấy việc chỉnh sửa GUI đang hoạt động.

Để tạo lại lỗi này, bên trong trình thiết kế biểu mẫu sử dụng mũi tên nhỏ ở trên cùng bên phải của điều khiển datagridview để đặt "bật chỉnh sửa" thành sai. Bây giờ thực hiện một thay đổi lớn cho các cột (chẳng hạn như thêm hoặc loại bỏ một cột). Biên dịch và chạy chương trình. Bây giờ quay trở lại mũi tên nhỏ và kích hoạt lại hộp kiểm "bật chỉnh sửa". Một lần nữa chạy chương trình. Tại thời điểm này, lỗi tự biểu hiện, và bạn sẽ thấy rằng datagridview không phải là GUI-editable mặc dù bạn đã cấu hình khác trong VS.