Vra

Ek is die ontwikkeling van'n Excel 2007 voeg-in met behulp van Visual Studio Gereedskap vir die Kantoor (2008).Ek het een vel met verskeie ListObjects op dit, wat is gebind om te datatables op opstart.Wanneer hulle bind, hulle autosize korrek.

Die probleem kom wanneer hulle weer gebind is.Ek het'n persoonlike knoppie op die lint bar wat gaan terug na die databasis en gekry om verskillende inligting wat gebaseer is op'n paar kriteria wat die gebruiker insette.Hierdie nuwe data kom terug en is weer gebind aan die ListObjects - maar hierdie keer het hulle is nie verklein en ek kry'n uitsondering:

ListObject kan nie gebind word nie, want dit kan nie verander word om aan te pas by die data.Die ListObject versuim het om by te voeg nuwe rye.Dit kan veroorsaak word as gevolg van onvermoë om te beweeg van voorwerpe onder van die lys voorwerp.

Innerlike uitsondering:"Voeg metode van die Reeks klas misluk"
Rede:Microsoft.Kantoor.Gereedskap.Excel.FailureReason.CouldNotResizeListObject

Ek was nie in staat om te vind iets baie betekenisvol op hierdie fout op Google of MSDN.Ek het probeer om dit uit te vind vir'n rukkie, maar dit was tevergeefs.

Basiese kode struktuur:

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

Let daarop dat hierdie uitsondering plaasvind, selfs wanneer die ListObject krimp, en nie net wanneer dit groei.

Was dit nuttig?

Oplossing

As iemand anders is met hierdie probleem, ek het die oorsaak van hierdie uitsondering gevind. ListObjects sal outomaties weer grootte op bindend, solank hulle het geen invloed op enige ander voorwerpe op die vel. Hou in gedagte dat ListObjects net kan beïnvloed die rye wat hulle draai om.

In my geval, die lys voorwerp wat bo die ander een het minder kolomme as die een daaronder. Kom ons sê die top ListObject het 2 kolomme, en die onderste ListObject het 3 kolomme. Wanneer die top ListObject verander sy aantal rye, dit het geen vermoë om enige veranderinge aan die derde kolom te maak, want dit was nie in dit onderliggende Range. Dit beteken dat dit nie enige selle kan skuif in die derde kolom, en so die tweede ListObject kon nie behoorlik geskuif word, wat lei tot my uitsondering hierbo.

Die verandering van die posisies van die ListObjects te plaas die wyer een bo die kleiner een werk goed. Na aanleiding van die logika bo, beteken dit nou dat die wyer ListObject al die kolomme van die tweede ListObject kan skuif, en aangesien daar niks onder die kleiner een dit kan ook enige selle skuif nodig. Die rede waarom ek is nie 'n probleem op die aanvanklike bindend is dat beide ListObjects was 'n enkele sel.

Aangesien dit nie optimale in my geval, ek sal waarskynlik leë kolomme gebruik of probeer om te speel met onsigbare kolomme as dit moontlik is, maar ten minste die oorsaak is nou duidelik.

Ander wenke

Ek het'n soortgelyke probleem met refreshign verskeie listobjects.Ons is die opstel van elke listObject.DataSource = null, dan rebinding begin by die onderkant listobject en werk ons pad op in plaas van die top-down.

Net 'n idee van iets te probeer om te sien of dit gee jou meer inligting: Probeer die grootte van die lys voorwerp voor die uitsondering lyn en kyk of dit gooi ook 'n uitsondering nie. Indien nie, probeer en die grootte van die reeks voorwerp na die nuwe formaat van die DataTable.

Jy sê dat dit gebeur wanneer die ListObject krimp en groei. Beteken dit ook gebeur as die ListObject dieselfde grootte bly?

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top