سؤال

أنا النامية Excel 2007 add-in باستخدام Visual Studio Tools ل Office (2008).لدي ورقة واحدة مع عدة ListObjects على ذلك ، والتي هي ملزمة datatables على بدء التشغيل.عندما تكون ملزمة ، فإنها autosize بشكل صحيح.

المشكلة تأتي عندما يتم إعادة ملزمة.لدي زر مخصص على الشريط الشريط الذي يعود إلى قاعدة البيانات و يقوم باسترداد معلومات مختلفة على أساس بعض المعايير التي مدخلات المستخدم.هذه البيانات الجديدة يعود وإعادة بد أن ListObjects - ولكن هذه المرة فهي ليست حجمها و أحصل على استثناء:

ListObject لا يمكن أن تكون ملزمة لأنه لا يمكن تغيير حجم لتناسب البيانات.على ListObject فشل في إضافة صفوف جديدة.هذا يمكن أن يحدث بسبب عدم القدرة على تحريك الأشياء دون من قائمة الكائن.

الاستثناء الداخلي:"طريقة إدراج مجموعة من الطبقة الفاشلة"
السبب:مايكروسوفت.مكتب.أدوات.Excel.FailureReason.CouldNotResizeListObject

لم أكن قادرة على العثور على أي شيء مفيد جدا على هذا الخطأ على جوجل أو 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 تتقلص, و ليس فقط عندما يكبر.

هل كانت مفيدة؟

المحلول

إذا كان أي شخص آخر هو وجود هذه المشكلة, لقد وجدت سبب هذا الاستثناء.ListObjects تلقائيا إعادة الحجم على ملزمة ، طالما أنها لا تؤثر على أي من الكائنات الأخرى في ورقة.نضع في اعتبارنا أن ListObjects يمكن أن تؤثر فقط على نطاقات الذي التفاف حولها.

في حالتي, قائمة الكائن الذي كان فوق الآخر كان أقل أعمدة من واحد أقل من ذلك.دعونا نقول الأعلى ListObject 2 الأعمدة, و أسفل ListObject 3 أعمدة.عند أعلى ListObject تغيير عدد الصفوف ، فإنه لم تكن لديه القدرة على إجراء أية تغييرات على العمود الثالث لأنه لم يكن في ذلك الكامنة النطاق.وهذا يعني أنه لا يمكن أن يتحول أي الخلايا في العمود الثالث ، وحتى الثانية ListObject لا يمكن أن يكون بشكل صحيح انتقلت ، مما أدى في الاستثناء أعلاه.

تغيير المواقف من ListObjects إلى مكان أوسع واحدة فوق أصغر واحد يعمل بشكل جيد.عقب المنطق أعلاه ، وهذا يعني الآن أن أوسع ListObject يمكن أن تحول كل من الأعمدة الثانية ListObject ، لأنه ليس هناك شيء أقل من واحد أصغر فإنه يمكن أيضا تحويل أي الخلايا اللازمة.السبب في أنني لا أعاني من أي مشكلة الأولية ملزم هو أن كلا ListObjects كانت خلية واحدة.

لأن هذا ليس الأمثل في حالتي أنا ربما سوف تستخدم أعمدة فارغة أو محاولة للعب مع حولها أعمدة غير مرئية إذا كان ذلك ممكنا ، ولكن على الأقل السبب الواضح الآن.

نصائح أخرى

لدي مشكلة مشابهة مع refreshign متعددة listobjects.نحن وضع كل listObject.DataSource = null, ثم rebinding بدءا من أسفل listobject والعمل طريقنا بدلا من أعلى إلى أسفل.

مجرد فكرة من شيء في محاولة لمعرفة ما إذا كان يمنحك المزيد من معلومات:محاولة تغيير حجم كائن قائمة قبل الاستثناء خط ومعرفة ما إذا كان هذا أيضا يطرح استثناء.إن لم يكن محاولة تغيير حجم مجموعة وجوه جديدة حجم DataTable.

أنت تقول أن هذا يحدث عندما ListObject ينكمش و ينمو.هل هذا يحدث أيضا إذا كان ListObject تبقى نفس الحجم ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top