.NET – 数据绑定上的Excel ListObject自动调整

我正在开发使用Visual Studio Tools for Office(2008)的Excel 2007加载项。 我有一个工作表上有几个ListObjects,它们在启动时绑定到数据表。 当他们绑定,他们自动大小正确。

问题出现时,他们重新约束。 我在function区栏上有一个自定义button,可以返回到数据库,并根据用户input的一些标准检索不同的信息。 这个新数据返回并重新绑定到ListObjects – 但是,这次他们没有resize,我得到一个exception:

ListObject不能被绑定,因为它不能resize以适应数据。 ListObject无法添加新行。 这可能是由于无法将对象移动到列表对象的下方。

内部exception:“范围类的插入方法失败”
原因:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

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

基本代码结构:

//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缩小时,也会发生此exception,而不仅仅是在增长时。

如果其他人有这个问题,我发现这个例外的原因。 只要ListObjects不影响表单上的其他对象,ListObjects就会自动重新设置绑定的大小。 请记住,ListObjects只能影响它们环绕的范围。

在我的情况下,列表中的对象比其他列上的对象有更less的列。 比方说,顶部的ListObject有2列,底部的ListObject有3列。 当顶部ListObject改变了它的行数时,它不能对第三列进行任何修改,因为它不在它的基础范围内。 这意味着它不能移动第三列中的任何单元格,所以第二个ListObject无法正确移动,导致上面的exception。

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

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

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

只是一个想法,试图看看它是否给你更多的信息:尝试在exception行之前调整列表对象,看看是否也会引发exception。 如果不是,请尝试将范围对象调整为DataTable的新大小。

你说这发生在ListObject收缩和增长时。 如果ListObject保持相同的大小,是否也会发生?