Avatar billede neess Nybegynder
21. december 2005 - 09:29 Der er 15 kommentarer og
1 løsning

Begrænsning i datatables

Har et dataset som jeg henter ind fra en xml fil.
Jeg vil så gerne have den kun viser de 5 første records
Kunne forestille mig det var noget med Tables[2].DefaultView.RowFilter="";

Listen bliver gennemløbet af en repeater, da layoutet ikke passer til datagrid.

Nogen der kan hjælpe ?
Avatar billede snepnet Nybegynder
21. december 2005 - 10:22 #1
der er en sådan mulighed ... men det kræver at du binder til et dataview istedet for direkte til dit dataset.
mvh
Avatar billede neess Nybegynder
21. december 2005 - 10:24 #2
Noget du kan hjælpe lidt mere med ?
Avatar billede snepnet Nybegynder
21. december 2005 - 10:27 #3
hvis du har dit dataset ds:

DataView dv = new DataView(ds.Tables[0], "id<10", "SomeColumn", DataViewRowState.CurrentRows);

someGrid.DataSource = dv;
someGrid.DataBind();

sig til hvis du skal bruge noget mere.

mvh
Avatar billede neess Nybegynder
21. december 2005 - 10:34 #4
Cannot perform '<' operation on System.String and System.Int32.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.EvaluateException: Cannot perform '<' operation on System.String and System.Int32.

Source Error:


Line 36:             //nyheden.DataSource=hentet.Tables[2];
Line 37:             //nyheden.DataBind();
Line 38:             DataView dv = new DataView(hentet.Tables[2], "title<10", "title", DataViewRowState.CurrentRows);
Line 39:             gentagnyhed.DataSource=dv;


Vil den ikke rigtigt.
Avatar billede snepnet Nybegynder
21. december 2005 - 10:37 #5
rowfilteret var bare for at der stod et eller andet .... du må lave dig et der passer til din datakilde.
mvh
Avatar billede neess Nybegynder
21. december 2005 - 10:40 #6
Og det er her ørnen ligger begravet hvordan skal den opbygges.
Jeg har 2 felter, description og title i min tabel.
Begge tekstfelter.
Avatar billede snepnet Nybegynder
21. december 2005 - 10:46 #7
ahh.... ja - fæstnede mig lidt mere ved det med rowfilteret du skrev.

hvis det alene er på antallet af rækker du vil vise - ville det måske være bedre for dig at benytte en PagedDataSource istedet:

http://www.sitepoint.com/article/asp-nets-pageddatasource

der er mange eksempler på nettet omkring den... prøv denne
http://www.google.dk/search?hl=da&q=asp.net+PagedDataSource&meta=

mvh
Avatar billede snepnet Nybegynder
21. december 2005 - 10:48 #8
Du har ikke umiddelbart mulighed for at angive MaxRows ell. på dit view... men du kan self. trixe det hvis du sorterer på id.
så kan du jo bare hente id'et fra row nummer 5, og bruge det i dit filterudtryk. det er meget ukompliceret, men en lidt haxet løsning.... mener jeg har lagt sådan en kommentar ud tidligere... prøver lige at finde den.
mvh
Avatar billede neess Nybegynder
21. december 2005 - 10:52 #9
der er ikke noget id på den enkelte row. Så man kan ikke arbejde ud fra id.
Avatar billede snepnet Nybegynder
21. december 2005 - 11:01 #10
så kan du lave et filter der dækker de 5 første titler - men det går hen og bliver lige haxet nok :o)
men jeg synes så også at du skal kigge på denne istedet 21/12-2005 10:46:14 hvis det kun er antallet du vil filtrere på.

men ... alm. paging kan løses på flere måder.
skal du reelt kun bruge de 5 første? - er det fordi du vil lave paging? eller noget helt tredie?

mvh
Avatar billede neess Nybegynder
21. december 2005 - 11:10 #11
Nej jeg for xml dokument ind fra dr med de seneste mange mange nyheder. Og skal kun vise de 5 første. Resten er fuldstændig lige meget og skal slet ikke vises, eller være tilgængelige.
Avatar billede snepnet Nybegynder
21. december 2005 - 11:13 #12
ahh .... så er det jo bare at smide det væk :o)

du kan gøre sådan her:

DataTable all = hentet.Tables[2];

DataTable result = all.Clone();

for(int i=0; i<5; i++)
{
  result.ImportRow(all[i]);
}

og så binde til result.

hva' siger du til den?

mvh
Avatar billede snepnet Nybegynder
21. december 2005 - 11:14 #13
(du kan jo så bare smide all ud til højre bagefter...)
Avatar billede neess Nybegynder
22. december 2005 - 09:29 #14
Fandt løsningen det skulle være all.rows[]
Avatar billede neess Nybegynder
22. december 2005 - 09:31 #15
Så endte op med
            DataTable result = hentet.Tables[2].Clone();

            for(int i=0; i<5; i++)
            {
                result.ImportRow(hentet.Tables[2].Rows[i]);
            }

Smid et svar, så for du lidt point.
Avatar billede snepnet Nybegynder
22. december 2005 - 11:43 #16
kommer her :o)
mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester