2008-08-21 32 views
7

Tôi đang phát triển một bổ trợ Excel 2007 bằng cách sử dụng Visual Studio Tools for Office (2008). Tôi có một tờ với một số ListObjects trên nó, mà đang được ràng buộc để datatables khi khởi động. Khi chúng bị ràng buộc, chúng tự động xác định chính xác..NET - Excel ListObject tự động hóa trên databind

Sự cố xảy ra khi chúng được ràng buộc lại. Tôi có một nút tùy chỉnh trên thanh ribbon để quay trở lại cơ sở dữ liệu và truy xuất thông tin khác nhau dựa trên một số tiêu chí mà người dùng nhập vào. Dữ liệu mới này trở lại và được tái ràng buộc với ListObjects - tuy nhiên, lần này họ không được thay đổi kích cỡ và tôi nhận được một ngoại lệ:

ListObject không thể bị ràng buộc bởi vì nó không thể thay đổi kích cỡ để phù hợp với dữ liệu. ListObject không thể thêm hàng mới. Điều này có thể là do không thể di chuyển các đối tượng bên dưới đối tượng danh sách .

Nội ngoại lệ: "Phương pháp Insert của lớp Dải thất bại"
Lý do: Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

tôi đã không thể tìm thấy bất cứ điều gì rất có ý nghĩa về lỗi này trên Google hoặc MSDN. Tôi đã cố gắng tìm ra điều này một lúc, nhưng vô ích.

cấu trúc mã cơ bản:

//at startup 
DataTable tbl = //get from database 
listObj1.SetDataBinding(tbl); 
DataTable tbl2 = //get from database 
listObj2.SetDataBinding(tbl2); 

//in buttonClick event handler 
DataTable tbl = //get different info from database 
//have tried with and without unbinding old source 
listObj1.SetDataBinding(tbl);    <-- exception here 
DataTable tbl2 = //get different info from database 
listObj2.SetDataBinding(tbl2); 

Lưu ý rằng ngoại trừ điều này xảy ra ngay cả khi ListObject được thu hẹp lại, và không chỉ khi nó phát triển.

Trả lời

4

Nếu có ai khác gặp sự cố này, tôi đã tìm thấy nguyên nhân của ngoại lệ này. ListObjects sẽ tự động tái kích thước trên ràng buộc, miễn là chúng không ảnh hưởng đến bất kỳ đối tượng nào khác trên trang tính. Hãy nhớ rằng ListObjects chỉ có thể ảnh hưởng đến các Ranges mà chúng quấn quanh.

Trong trường hợp của tôi, đối tượng danh sách phía trên đối tượng kia có ít cột hơn cột bên dưới. Giả sử ListObject trên cùng có 2 cột và ListObject dưới cùng có 3 cột. Khi ListObject trên cùng thay đổi số hàng của nó, nó không có khả năng thực hiện bất kỳ thay đổi nào cho cột thứ ba vì nó không nằm trong Phạm vi cơ bản của nó. Điều này có nghĩa là nó không thể thay đổi bất kỳ ô nào trong cột thứ ba và do đó ListObject thứ hai không thể được di chuyển đúng cách, dẫn đến ngoại lệ của tôi ở trên.

Thay đổi vị trí của ListObjects để đặt hình rộng hơn bên trên vị trí nhỏ hơn hoạt động tốt. Theo logic trên, điều này có nghĩa là ListObject rộng hơn có thể dịch chuyển tất cả các cột của ListObject thứ hai, và vì không có gì bên dưới lớp ListObject nhỏ hơn, nó cũng có thể thay đổi bất kỳ ô nào cần thiết. Lý do tôi không gặp bất kỳ rắc rối nào về ràng buộc ban đầu là cả ListObjects đều là một ô duy nhất.

Vì đây không phải là tối ưu trong trường hợp của tôi, tôi có thể sử dụng các cột trống hoặc cố gắng chơi xung quanh với các cột ẩn nếu có thể, nhưng ít nhất nguyên nhân hiện đã rõ.

0

Chỉ cần một ý tưởng về một cái gì đó để thử xem nó có cung cấp cho bạn thêm thông tin hay không: Thử thay đổi kích thước đối tượng danh sách trước dòng ngoại lệ và xem điều đó có ném ngoại lệ hay không. Nếu không, hãy thử và thay đổi kích thước đối tượng phạm vi thành kích thước mới của DataTable.

Bạn nói rằng điều này xảy ra khi ListObject co lại và phát triển. Liệu nó cũng xảy ra nếu ListObject vẫn có cùng kích thước?

1

Tôi gặp sự cố tương tự với làm mới nhiều danh sách liệt kê. Chúng tôi đang thiết lập mỗi listObject.DataSource = null, sau đó rebinding bắt đầu từ listobject dưới cùng và làm việc theo cách của chúng tôi lên thay vì từ trên xuống.

Các vấn đề liên quan