gor*_*ric 7 .net c# data-binding excel 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);
Run Code Online (Sandbox Code Playgroud)
请注意,即使ListObject正在缩小,并且不仅在它增长时,也会发生此异常.
如果其他人遇到这个问题,我已经找到了这个异常的原因。ListObjects 将在装订时自动调整大小,只要它们不影响纸张上的任何其他对象即可。请记住,ListObjects 只能影响它们环绕的范围。
就我而言,另一个列表对象上方的列表对象的列数少于其下方的列数。假设顶部的 ListObject 有 2 列,底部的 ListObject 有 3 列。当顶部 ListObject 更改其行数时,它无法对第三列进行任何更改,因为它不在其基础 Range 中。这意味着它无法移动第三列中的任何单元格,因此无法正确移动第二个 ListObject,导致出现上面的异常。
更改 ListObjects 的位置,将较宽的对象放置在较小的对象上方,效果很好。按照上面的逻辑,这现在意味着较宽的 ListObject 可以移动第二个 ListObject 的所有列,并且由于较小的 ListObject 下面没有任何内容,因此它也可以移动任何必要的单元格。我在初始绑定上没有遇到任何问题的原因是两个 ListObject 都是单个单元格。
由于这在我的情况下不是最佳的,因此我可能会使用空列或尝试使用不可见的列(如果可能的话),但至少原因现在已经清楚了。
| 归档时间: |
|
| 查看次数: |
3091 次 |
| 最近记录: |