.NET - Excel ListObject在数据绑定上自动调整大小

时间:2008-08-21 16:36:12

标签: c# .net excel data-binding vsto

我正在使用Visual Studio Tools for Office(2008)开发Excel 2007加载项。我有一张包含多个ListObjects的工作表,它们在启动时绑定到数据表。当它们被绑定时,它们会自动正确地进行自动调整。

重新绑定问题时会出现问题。我在功能区栏上有一个自定义按钮,它返回到数据库,并根据用户输入的某些条件检索不同的信息。这个新数据返回并重新绑定到ListObjects - 但是,这次它们没有调整大小并且我得到一个例外:

  

无法绑定ListObject,因为它   无法调整大小以适应数据。该   ListObject无法添加新行。   这可能是因为   无法移动下方的物体   列表对象。

     
    

内部异常:“Range类的插入方法失败”
    原因:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

  

我无法在Google或MSDN上找到有关此错误的任何有意义的内容。我一直试图弄清楚这一点,但无济于事。

基本代码结构:

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

请注意,即使ListObject正在缩小,也会发生此异常,而不仅仅是在它增长时。

3 个答案:

答案 0 :(得分:4)

如果有其他人遇到此问题,我找到了此异常的原因。 ListObjects将自动在绑定时重新调整大小,只要它们不影响工作表上的任何其他对象。请记住,ListObjects只能影响它们所环绕的范围。

在我的情况下,列在另一个上面的列表对象的列数少于下面的列数。假设顶部ListObject有2列,底部ListObject有3列。当顶部ListObject更改其行数时,它无法对第三列进行任何更改,因为它不在其基础Range中。这意味着它无法移动第三列中的任何单元格,因此无法正确移动第二个ListObject,导致上面的异常。

更改ListObjects的位置以将较宽的一个放在较小的一个上方可以正常工作。按照上面的逻辑,现在这意味着更宽的ListObject可以移动第二个ListObject的所有列,并且由于在较小的ListObject下面没有任何内容,它也可以移动任何必要的单元格。我在初始绑定上没有遇到任何问题的原因是两个ListObject都是单个单元格。

由于这在我的情况下不是最佳的,我可能会使用空列或尝试使用不可见的列,如果可能的话,但至少原因现在已经清楚了。

答案 1 :(得分:1)

我有一个类似的问题,刷新多个listobjects。我们设置每个listObject.DataSource = null,然后从底部的listobject开始重新绑定,然后向上工作而不是自上而下。

答案 2 :(得分:0)

只是想知道它是否能为您提供更多信息:尝试在异常行之前调整列表对象的大小,看看是否也会抛出异常。如果没有,请尝试将范围对象的大小调整为DataTable的新大小。

你说当ListObject缩小并增长时会发生这种情况。如果ListObject保持相同的大小,是否也会发生?