2008-11-14 30 views
13

Tôi có biểu mẫu thắng (C#) với chế độ xem dữ liệu. Tôi đặt nguồn dữ liệu của lưới thành dữ liệu.DatagridView Không hiển thị biểu tượng lỗi hoặc văn bản lỗi?

Người dùng muốn kiểm tra xem một số dữ liệu trong datatable có tồn tại trong một nguồn khác không, vì vậy chúng tôi lặp qua bảng so sánh các hàng với nguồn khác và đặt rowerror trên datatable thành một tin nhắn ngắn. Datagridview không hiển thị các lỗi này. Sai sót trên datagridviewrows được thiết lập, nhưng không có lỗi hiển thị.

Tôi chỉ mong đợi quá nhiều lỗi hiển thị và chúng chỉ hiển thị trong ngữ cảnh chỉnh sửa dữ liệu trong lưới?

Tôi đã gặp phải vấn đề này trong một ngày và tìm kiếm ai đó đã đăng vấn đề về simalar mà không có kết quả - trợ giúp!

Trả lời

-1

Tôi tin rằng các lỗi sẽ chỉ hiển thị khi chỉnh sửa. Những gì bạn có thể làm là thêm một cột bool vào DataTable của bạn, ổ đĩa này hiển thị một cột hình ảnh/tùy chỉnh trong DataGridView, phản ánh liệu có lỗi hay không.

+1

Bạn có thể đặt văn bản lỗi trên hàng của chế độ xem lưới dữ liệu bất kỳ lúc nào và nó sẽ hiển thị biểu tượng. –

8

Kiểm tra xem AutoSizeRowsMode được đặt thành DataGridViewAutoSizeRowsMode.None. Tôi đã thấy rằng biểu tượng xem trước hàng Errortext không được hiển thị khi AutoSizeRowsMode không được đặt thành mặc định là không.

DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None 
+0

Dường như không tạo nên sự khác biệt ... – Simon

+0

Làm việc cho tôi theo NET 3.5 – Gnat

+1

cũng đã làm việc cho tôi. btw, đây là [bài đăng kết nối] (http://connect.microsoft.com/VisualStudio/feedback/details/115989/datagridview-errortext-is-not-displayed-properly) bao gồm giải pháp thay thế khi bạn vẫn cần sử dụng AutoSizeRowsMode – kman

8

Đây là hơi muộn cho các poster ban đầu, nhưng ở đây những gì giải quyết nó cho tôi ...

Kiểm tra chiều cao hàng. Nếu nó nhỏ hơn , nó sẽ không vẽ biểu tượng. Hãy thử thiết lập nó cao hơn một chút để xem đó có phải là vấn đề không.

grid.RowTemplate.Height = 22 
4

Nếu bạn đặt e.Cancel thành True biểu tượng không hiển thị. Mà không cho phép người dùng biết rằng một vấn đề tồn tại trên dòng đó.

+0

... trong trường hợp này bạn nên làm một cái gì đó như [câu trả lời này] (http://stackoverflow.com/a/7714126/42961). – damian

0

Trong trường hợp người khác vẫn đang tìm kiếm ngày nay: Giải pháp làm việc cho tôi là gán lại (cùng) DataSource cho DataGridView và gọi phương thức Làm mới trên lưới sau khi đã đặt thuộc tính RowError.

(mã VB.Net :)

myDataGridView.DataSource = myDataSet.Tables(0) 
myDataGridView.Refresh() 

Sau khi làm điều đó, của mới giao RowError được cuối cùng hiển thị.

+1

Tôi tìm thấy sau khi tôi đã thiết lập ErrorText của ô - Tôi đã vô tình tái nhập vào lưới và do đó xóa tất cả các ErrorTexts !!! Dựa trên điều này nó đã được dễ dàng để sửa chữa ** nhưng ** nó đã cho tôi suy nghĩ như thế nào ** giải pháp của bạn là nguyên nhân của vấn đề của tôi **. –

4

DataGridView phải hiển thị tại thời điểm thuộc tính ErrorText được đặt.

-1

Gửi tổ hợp phím ESC sẽ buộc nó để hiển thị (ít nhất là làm việc cho tôi)

SendKeys.Send("{ESC}"); 
1

Kiểm tra dgv.ShowRowErrors tài sản.

0

Một lý do nữa biểu tượng lỗi không hiển thị là, nếu kích thước tiêu đề hàng quá nhỏ. Theo mặc định, nó là 46. Nếu vì một số lý do bạn đặt tiêu đề hàng thành kích thước nhỏ hơn, chẳng hạn như 30, biểu tượng lỗi sẽ không hiển thị.

-1

tôi có kinh nghiệm vấn đề tương tự khi xác nhận đầu vào sử dụng trong xử lý

private void gridGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 

. Vấn đề là tôi đặt e.Cancel=true trong trường hợp đầu vào không hợp lệ.

1

Nếu bạn đang sử dụng Visual Studio 2017 và dữ liệu của bạn không được ràng buộc với một nguồn dữ liệu, sau đó bạn phải thiết lập các ErrorText trên tế bào chứ không phải là liên tiếp, như thế này:

gvwWebsites.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "You have already used that address."; 
Các vấn đề liên quan