2008-08-21 19 views
7

मैं ऑफिस (2008) के लिए विजुअल स्टूडियो टूल्स का उपयोग कर एक्सेल 2007 एड-इन विकसित कर रहा हूं। मेरे पास कई सूची ऑब्जेक्ट्स के साथ एक शीट है, जो स्टार्टअप पर डेटाटेबल्स के लिए बाध्य हैं। जब वे बाध्य होते हैं, तो वे सही ढंग से स्वत: व्यवस्थित करते हैं।.NET - एक्सेल लिस्ट ऑब्जेक्ट डाटाबेस पर ऑटोसाइजिंग

समस्या तब आती है जब वे फिर से बाध्य होते हैं। मेरे पास रिबन बार पर एक कस्टम बटन है जो डेटाबेस पर वापस जाता है और उपयोगकर्ता द्वारा इनपुट किए गए कुछ मानदंडों के आधार पर अलग-अलग जानकारी पुनर्प्राप्त करता है। इस नए डेटा वापस आता है और ListObjects को फिर से बाध्य है - हालांकि, इस बार वे नहीं बदला जाता है और मैं एक अपवाद प्राप्त करें:

ListObject बाध्य नहीं किया जा सकता क्योंकि यह डेटा फिट करने के लिए आकार नहीं बदला जा सकता है। ListObject नई पंक्तियों को जोड़ने में विफल रहा। सूची ऑब्जेक्ट के नीचे ऑब्जेक्ट्स को स्थानांतरित करने में असमर्थता के कारण इसका कारण हो सकता है।

इनर अपवाद: "रेंज वर्ग की विधि सम्मिलित विफल"
कारण: Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

मैं पर बहुत सार्थक कुछ भी खोजने के लिए सक्षम नहीं था Google या MSDN पर यह त्रुटि। मैं थोड़ी देर के लिए इसे समझने की कोशिश कर रहा हूं, लेकिन इसका कोई फायदा नहीं हुआ।

Basic कोड संरचना:

//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 घट रहा है, और न केवल जब यह बढ़ता है।

उत्तर

4

अगर किसी और को यह समस्या हो रही है, तो मुझे इस अपवाद का कारण मिला है। ListObjects स्वचालित रूप से बाध्यकारी पर फिर से आकार देंगे, जब तक वे शीट पर किसी भी अन्य वस्तुओं को प्रभावित नहीं करते हैं। ध्यान रखें कि ListObjects केवल उन रेंजों को प्रभावित कर सकते हैं जिन्हें वे चारों ओर लपेटते हैं।

मेरे मामले में, सूची वस्तु जो दूसरे के ऊपर थी, उसके नीचे की तुलना में कम कॉलम था। आइए मान लें कि शीर्ष ListObject में 2 कॉलम थे, और नीचे ListObject में 3 कॉलम थे। जब शीर्ष ListObject ने अपनी पंक्तियों की संख्या बदल दी, तो उसके पास तीसरे कॉलम में कोई भी बदलाव करने की कोई क्षमता नहीं थी क्योंकि यह अंतर्निहित रेंज में नहीं थी। इसका मतलब यह है कि यह किसी भी कक्ष को तीसरे कॉलम में स्थानांतरित नहीं कर सका, और इसलिए दूसरा ListObject ठीक से स्थानांतरित नहीं किया जा सका, जिसके परिणामस्वरूप ऊपर मेरा अपवाद हो गया।

सूची ऑब्जेक्ट्स की स्थिति बदलना छोटे से ऊपर एक बड़ा काम करने के लिए ठीक काम करता है। उपर्युक्त तर्क के बाद, अब इसका मतलब है कि व्यापक सूचीऑब्जेक्ट दूसरे सूची ऑब्जेक्ट के सभी कॉलम को स्थानांतरित कर सकता है, और चूंकि छोटे से नीचे कुछ भी नहीं है, यह आवश्यक किसी भी कक्ष को भी स्थानांतरित कर सकता है। शुरुआती बाध्यकारी पर मुझे कोई परेशानी नहीं होने का कारण यह है कि ListObjects दोनों एक ही सेल थे।

चूंकि यह मेरे मामले में इष्टतम नहीं है, इसलिए शायद मैं खाली कॉलम का उपयोग करूंगा या यदि संभव हो तो अदृश्य कॉलम के साथ खेलने की कोशिश करें, लेकिन कम से कम कारण अब स्पष्ट है।

0

यह देखने का प्रयास करने के लिए कुछ ऐसा विचार है कि यह आपको अधिक जानकारी देता है: अपवाद रेखा से पहले सूची वस्तु का आकार बदलने का प्रयास करें और देखें कि क्या यह अपवाद फेंकता है। यदि नहीं, तो डेटा ऑब्जेक्ट के नए आकार में रेंज ऑब्जेक्ट को आज़माएं और आकार बदलें।

आप कहते हैं कि यह तब होता है जब ListObject घटता है और बढ़ता है। क्या यह भी होता है यदि ListObject एक ही आकार में रहता है?

1

मुझे कई listobjects को रीफ्रेश करने के साथ एक ही समस्या है। हम प्रत्येक listObject.DataSource = null को सेट कर रहे हैं, फिर नीचे listobject पर शुरू करना और ऊपर की बजाय हमारे रास्ते को काम करना बंद कर देना।

संबंधित मुद्दे