NET - Excel ListObject autostørrelse på databind

stemmer
7

Jeg utvikler en Excel 2007-tillegg ved hjelp av Visual Studio Tools for Office (2008). Jeg har ett ark med flere ListObjects på det, som blir bundet til datatables ved oppstart. Når de er bundet, autosize de riktig.

Problemet kommer når de er re-bundet. Jeg har en egendefinert knapp på båndet bar som går ut igjen til databasen og henter annen informasjon basert på noen kriterier som brukeren innganger. Denne nye data kommer tilbake og er re-bundet til ListObjects - men denne gangen de endres ikke og jeg får et unntak:

ListObject kan ikke være bundet fordi det ikke kan bli endret for å passe dataene. Den ListObject mislyktes i å legge til nye rader. Dette kan være forårsaket på grunn av manglende evne til å flytte objekter under på listen objekt.

Indre unntak: Sett metode for Range klasse mislyktes
Reason: Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Jeg var ikke i stand til å finne noe veldig meningsfylt om denne feilen på Google eller MSDN. Jeg har prøvd å finne ut av dette for en stund, men til ingen nytte.

Basic-kode struktur:

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

Merk at dette unntaket skjer selv når ListObject krymper, og ikke bare når det vokser.

Publisert på 21/08/2008 klokken 14:36
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Bare en idé om noe å prøve for å se om det gir deg mer info: Prøv endrer størrelsen listen objektet før unntak linjen og se om det også kaster et unntak. Hvis ikke, prøv og endre størrelse på området objektet til den nye størrelsen på Datatable.

Du sier at dette skjer når ListObject krymper og vokser. Betyr det også skje hvis ListObject fortsatt den samme størrelsen?

Svarte 22/08/2008 kl. 21:27
kilden bruker

stemmer
4

Hvis noen andre har dette problemet, har jeg funnet årsaken til dette unntaket. ListObjects vil automatisk endre størrelsen på bindende, så lenge de ikke påvirker andre objekter på arket. Husk at ListObjects bare kan påvirke områdene som de brytes rundt.

I mitt tilfelle, listen objekt som var over den andre som hadde færre kolonner enn den nedenfor det. La oss si at toppen ListObject hadde 2 kolonner, og bunnen ListObject hadde 3 kolonner. Når topp ListObject endret antall rader, det hadde ingen mulighet til å gjøre noen endringer i den tredje kolonnen, siden det ikke var i det underliggende Range. Dette betyr at det ikke kunne skifte alle celler i den tredje kolonne, og så den andre ListObject ikke kunne være riktig flyttes, noe som resulterer i min unntak ovenfor.

Å endre posisjonene til ListObjects for å plassere den bredere ene over den mindre fungerer fint. Etter logikken ovenfor, betyr dette nå at den bredere ListObject kan skifte alle kolonnene i andre ListObject, og siden det ikke er noe under den mindre det kan også forskyve noen celler nødvendig. Grunnen til at jeg var ikke å ha noen problemer på den første bindende er at begge ListObjects var en enkelt celle.

Siden dette ikke er optimalt i mitt tilfelle, vil jeg sannsynligvis bruke tomme kolonner eller prøve å leke seg med usynlige kolonner hvis det er mulig, men minst årsaken er nå klart.

Svarte 25/08/2008 kl. 17:30
kilden bruker

stemmer
1

Jeg har et lignende problem med refreshign flere listobjects. Vi setter hver listObject.DataSource = null, da rebinding starter nederst listobject og arbeider vei opp i stedet for ovenfra og ned.

Svarte 18/03/2009 kl. 14:33
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more