2008-08-21 8 views
7

Office (2008) 용 Visual Studio Tools를 사용하여 Excel 2007 추가 기능을 개발 중입니다. 하나의 시트에 여러 개의 ListObject가 있는데, 시작시 데이터 테이블에 바인딩됩니다. 바인딩되면 올바르게 자동 크기 지정됩니다..NET - Excel ListObject가 데이터 바인딩에서 자동 크기 조정

문제는 다시 바인딩 될 때 발생합니다. 리본 바에 사용자 정의 버튼이있어 데이터베이스로 돌아가서 사용자가 입력 한 몇 가지 기준에 따라 다른 정보를 검색합니다. 이 새로운 데이터는 다시 와서하고 ListObjects에 다시 바인딩 - 그러나,이 시간이 그들이 크기가 조정되지 않으며 나는 예외가 얻을 :

ListObject가 그 가 데이터에 맞게 크기를 조정할 수 없기 때문에 바인딩 할 수 없습니다. ListObject가 새 행을 추가하지 못했습니다. 목록 개체의 아래쪽에서 개체를 이동할 수 없기 때문에이 문제가 발생할 수 있습니다.

내부 예외 : Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

나는 매우 의미있는 아무것도 찾을 수 없습니다 :
이유는 "범위 클래스의 삽입 방법은 실패" Google 또는 MSDN에서이 오류가 발생했습니다. 나는 이것을 잠시 동안 알아 내려고 노력했지만 아무 소용이 없다.

기본 코드 구조 :이 예외가 성장에만 ListObject가 축소 아닌 경우에도 발생

//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); 

참고.

답변

4

다른 사람이이 문제를 겪고있는 경우이 예외의 원인을 발견했습니다. ListObjects는 시트의 다른 객체에 영향을주지 않는 한 바인딩의 크기를 자동으로 조정합니다. ListObject는 래핑하는 범위에만 영향을 줄 수 있습니다.

필자의 경우, 다른 개체 위에있는 목록 개체는 그 아래의 개체보다 적은 수의 열이 있습니다. 최상위 ListObject에 2 개의 열이 있고 하위의 ListObject에 3 개의 열이 있다고 가정 해 보겠습니다. 상위 ListObject가 행 수를 변경하면 기본 Range가 아니기 때문에 세 번째 열을 변경할 수 없습니다. 즉, 세 번째 열에있는 셀을 이동할 수 없으므로 두 번째 ListObject를 제대로 이동할 수 없으므로 위의 예외가 발생합니다.

ListObjects의 위치를 ​​변경하면 더 큰 것을 위의 큰 것으로 배치 할 수 있습니다. 위의 논리에 따르면, 이제는 더 넓은 ListObject가 두 번째 ListObject의 모든 열을 이동할 수 있다는 것을 의미하며 더 작은 셀 아래에는 아무것도 없으므로 필요한 모든 셀을 이동할 수도 있습니다. 초기 바인딩에 문제가 없었던 이유는 두 ListObject 모두 단일 셀 이었기 때문입니다.

필자의 경우 최적이 아니므로 가능한 빈 열을 사용하거나 보이지 않는 열을 사용하려고합니다.하지만 적어도 원인은 분명합니다.

0

더 많은 정보를 얻을 수 있는지 알아보기위한 것입니다. 예외 행 앞에있는 목록 개체의 크기를 조정하여 예외가 throw되는지 확인하십시오. 그렇지 않으면 범위 개체의 크기를 DataTable의 새 크기로 조정하십시오.

ListObject가 축소되어 커질 때 발생한다고 말합니다. ListObject가 같은 크기로 남아 있으면 역시 발생합니까?

1

refreshign 다중 listobjects 비슷한 문제가 있어요. 우리는 각 listObject.DataSource = null을 설정하고, 맨 아래의 listObject에서 시작하여 리바 인딩하고 위로 가기 대신 위로 작업을합니다.