Avatar billede bambinogrande Nybegynder
29. januar 2003 - 14:27 Der er 78 kommentarer og
1 løsning

Items.Count spørgsmål?

Hej med jer,

Jeg har i min søge funktion, lavet en count så man kan se hvor mange resultater der er fundet.

Det har jeg lavet således:

lblSearchNum.Text = "Antal resultater: " & dgSearchResult.Items.Count.ToString()

Mit spørgsmål er nu, hvordan smider jeg tælleren på, ud for hver fundet resultat i stedet for som et samlede tal?

Altså så de bliver listet op:

1. resultat1

2. resultat2

3. resultat3

4. resultat4

ovs ovs

Mvh

/B.G.
Avatar billede burningice Nybegynder
29. januar 2003 - 15:36 #1
jeg går ud fra at du har et datagrid, og det du så gør er at du tæller antallet af elementer i det?

resultat1... hvor kommer det så fra... og hvad med resultat2... er det antallet af elementer i hvert sit datagrid eller??
Avatar billede midas_dk Nybegynder
29. januar 2003 - 22:34 #2
en datagrid har også en indbygget row-id-funktion, så vidt jeg husker. Noget med DataGridItem.DataSetIndex eller noget!

Nu ved jeg jo så ikke, hvordan du fylder din grid, men hvis du har en collection af en art, kan du jo loope igennem den med en tæller og derved tilføje en column med tælleren i...
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 08:40 #3
Hej igen,-

Jep jeg har et datagrid, og det eksempel oven over med resultat1 ovs skal forstille "antal fundne resultater i datagrided" eller måden jeg vil have det til at stå på!

Og ja jeg har lavet en kollonne i datagrided der kan indeholde tallene. Men skal jeg smide det i en label eller hvad skal jeg gøre?

Men >> midas_dk den der indbyggede row-id-funktion der, hvordan fungere den?

:-(
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 08:48 #4
btw mit datagrid ser således ud:

<asp:datagrid 
                                        id="dgSearchResult"
                                        cellpadding="10"
                                        cellspacing="0"
                                        enableviewstate="false"
                                        AutoGenerateColumns="false"
                                        showheader="False"
                                        showfooter="True"                                       
                                        runat="Server"
                                        gridlines="None"
                                        >
                                        <headerstyle />
                                        <footerstyle />                                       
                                        <columns>
                                            <asp:templatecolumn>
                                                <itemtemplate>
                                                    <asp:label id="lblCount" runat="server" />.
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                            <asp:templatecolumn>
                                                <itemtemplate>
                                                    <asp:hyperlink
                                                        id="HyperLink1"
                                                        runat="server"
                                                        text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'
                                                        navigateurl='<%# "Products.aspx?PageID=3&ProductID=" & DataBinder.Eval(Container.DataItem, "ProductID") %>'
                                                    />
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                        </columns>
                                    </asp:datagrid>

mvh

B.G
Avatar billede burningice Nybegynder
30. januar 2003 - 11:33 #5
bg>> skal det så stå sådan her, ca.

Navn  antal
Kød    10
Ost    50
Brød  35

??
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 11:36 #6
nej....... omvendt.

og det er ikke en tæller som sådan, det er nærmest bare et row nummer.

1. navn

2. kød

3. ost

4. brød

ovs

:-)
Avatar billede burningice Nybegynder
30. januar 2003 - 11:53 #7
aah... så det står måske sådan her nu

navn
kød
ost
brød

og du vil så gerne have numre på?
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 11:57 #8
nemlig....................

:-)
Avatar billede burningice Nybegynder
30. januar 2003 - 12:17 #9
hehe... det første døgn er brugt på at finde ud af hvad det egentlig var du ville.. det er sq ikke altid lige så nemt ;)

jeg tør næsten ikke sige det, men jeg er ret sikker på du skal kigge på ItemDataBound-eventen igen ;) på denne måde kan du finde nr'et på det item som bliver bindet, og vise det sammen med

  void Item_Bound(Object sender, DataGridItemEventArgs e)
  {
      Response.Write e.Item.ItemIndex + 1; //lægger et til, da index som regel starter fra 0
  }
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 12:43 #10
Ja det er lige med at forklare det rigtigt! hehe,-

men grunden til at jeg ikke svarer om aften, er fordi jeg er på job nu og ingen net har der hjemme pga min router er total fucked!

:-(

Jeg prøver lige at oversætte til VB.NET:

Sub Item_Bound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
    Label1.Text = e.Item.ItemIndex + 1
End Sub

prøver lige at smide det i en label!
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 12:48 #11
Får følgende fejl:

Den kan ikke finde den lblCount?

System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Sub Item_Bound(ByVal sender As Object, ByVal e As  DataGridItemEventArgs)

>>FEJL>> lblCount.Text = CStr(e.Item.ItemIndex + 1)

End Sub
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 12:54 #12
hvis jeg udskriver den, og der er 26 fundende resultater på min søgning, så vider den rigtig nok:

012345678910111213141516171819202122232425260

hvad skal jeg gøre?
Avatar billede midas_dk Nybegynder
30. januar 2003 - 12:55 #13
Er det monstro ikke noget med at du tilføjer en column i din datagrid, og så ellers tilføjer en OnItemCreated event (til din grid), som så udregner værdien af e.Item.ItemIndex + 1 for hver row og propper den i din column? Jeg ved ikke om det gi'r mening...
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:15 #14
Det giver perfekt mening, men hvordan skal det stå i min kode:

Her kommer min kode som den ser ud nu:

SearchResult.aspx filen:
------------------------------------------------------------

<asp:datagrid
onitemcreated="Item_Bound"
id="dgSearchResult"
cellpadding="10"
cellspacing="0"
enableviewstate="false"
AutoGenerateColumns="false"
showheader="False"
showfooter="True"
runat="Server"
gridlines="None"
>
<columns>
<asp:templatecolumn>
<itemtemplate>
<asp:hyperlink
id="HyperLink1"
runat="server"
text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'
navigateurl='<%# "Products.aspx?PageID=3&ProductID=" & DataBinder.Eval(Container.DataItem, "ProductID") %>'
/>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>

-------------------------------------------------------------------------
Code-behind filen SearchResult.aspx.vb:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            Dim SearchString As String = Request.Params("Search")

            If Not SearchString Is Nothing Then
                Dim allWords As String = Request.Params("AllWords")
                Dim products As ProductDb = New ProductDb()

                dgSearchResult.DataSource = products.SearchCatalog(SearchString, allWords)
                dgSearchResult.DataBind()


                lblResultFor.Text = "<font size=""2"">for: " & """" & SearchString & """" & "</font>"
                lblSearchNum.Text = "<font size=""2"">Antal resultater: " & dgSearchResult.Items.Count.ToString() & "</font>"

            End If
        End If

    End Sub

    Sub Item_Bound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
        Response.Write(CStr(e.Item.ItemIndex + 1))
    End Sub
Avatar billede midas_dk Nybegynder
30. januar 2003 - 13:32 #15
Altså, nu bliver jeg også en smule forvirret :-/... Hvordan laver du din datasource til gridden? Løber du noget som helst igennem, eller er det bare et "uberørt" dataset, du bruger?
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:38 #16
Jeg har en funktion der returnere en SqlDataReader.........

'her opretter jeg en ny instance af klassen "products"
Dim products As ProductDb = New ProductDb()

'her angiver jeg at datakilden er = med SearchCatalog som er en funktion jeg
'har til at ligge en subklasse og den tager parameteren "SearchString"
dgSearchResult.DataSource = products.SearchCatalog(SearchString)
dgSearchResult.DataBind()

og til sidst binder jeg dataen til datagrided "dgSearchResult"
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:40 #17
Funktionen kommer her:

Public Function SearchCatalog(ByVal SearchString As String, ByVal allWords As String) As SqlDataReader
        Dim myConnection As New SqlConnection(connectionString)
        Dim myCommand As New SqlCommand("SearchCatalog", myConnection)

        myCommand.CommandType = CommandType.StoredProcedure

        If allWords.ToUpper = "TRUE" Then
            myCommand.Parameters.Add("@AllWords", SqlDbType.Bit, 1)
            myCommand.Parameters("@AllWords").Value = 1
        Else
            myCommand.Parameters.Add("@AllWords", SqlDbType.Bit, 1)
            myCommand.Parameters("@AllWords").Value = 0
        End If

        SearchString = SearchString.Replace(",", " ")
        SearchString = SearchString.Replace(";", " ")
        SearchString = SearchString.Replace(".", " ")
        SearchString = SearchString.Replace("'", " ")

        Dim words() As String = Split(SearchString, " ")

        Dim wordsCount As Integer = words.Length
        Dim index As Integer = 0
        Dim addedWords As Integer = 0

        While addedWords < 10 And index < wordsCount
            If Len(words(index)) > 2 Then
                addedWords += 1
                myCommand.Parameters.Add("@Word" + addedWords.ToString, words(index))
            End If
            index += 1
        End While

        myConnection.Open()
        Return myCommand.ExecuteReader(CommandBehavior.CloseConnection)
    End Function
Avatar billede burningice Nybegynder
30. januar 2003 - 13:42 #18
uhm.. hvis du nu tilføjer en ny kulonne til dit datagrid (lad os sige at det er den første) som skal bruges til nummere... kunne vi så være så heldige at dette ville virke?

dg.Items[e.Item.ItemIndex].Cells[0].Text = e.Item.ItemIndex + 1;
Avatar billede burningice Nybegynder
30. januar 2003 - 13:44 #19
bg & midas.dk>> det burde sådan set være underordnet hvordan at datagriddet bliver fyldt.
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:45 #20
det lyder som en go ide det der, men den kan ikke lige selv fortolke til VB.NET

>> dg.Items[e.Item.ItemIndex].Cells[0].Text = e.Item.ItemIndex + 1; ???
Avatar billede midas_dk Nybegynder
30. januar 2003 - 13:46 #21
cyberfessor > Det burde det jo sådan set! Men, men, men - den der cells property tager ALLE celler i selve HTML-tabellen - dvs. hvis der f.eks. er paging på grid'en, overskriver du sådan set hele den celles indhold, fordi det er den første i dén række :-( Har lige testet det, og det er ikke pænt...
Avatar billede midas_dk Nybegynder
30. januar 2003 - 13:48 #22
Men okay, hvis det er godt nok, kan du jo nøjes med i din ItemCreated event at skrive:

e.Item.Cells(0).Text = e.Item.ItemIndex + 1

- eller hvad?
Avatar billede midas_dk Nybegynder
30. januar 2003 - 13:50 #23
bg > Et (nemmere?) alternativ kunne være at du allerede i din stored procedure tilføjer en variabel, som du selv tæller op for hver række...
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:51 #24
>> Midas_dk

Virker det hos dig? Hehe,- dammmm det gør det bare ikke her.

Men ja det skal kun stå i den første kollone i datagrided, og der kommer pageing på senere.

:-(
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:53 #25
det med SP COUNT lyder fed, men hvordan.

Her er min SP:

ALTER PROCEDURE SearchCatalog
(@Allwords bit,
@Word1 varchar(15) = NULL,
@Word2 varchar(15) = NULL,
@Word3 varchar(15) = NULL,
@Word4 varchar(15) = NULL,
@Word5 varchar(15) = NULL,
@Word6 varchar(15) = NULL,
@Word7 varchar(15) = NULL,
@Word8 varchar(15) = NULL,
@Word9 varchar(15) = NULL,
@Word10 varchar(15) = NULL,
@Word11 varchar(15) = NULL)
AS

IF @AllWords = 0
    SELECT Products.ProductID, Products.[Name], Products.[Description], Products.Price, Products.Category, Products.CategoryID, Products.SearchWords
    FROM Products
    WHERE (Name LIKE '%'+@Word1+'%' OR Description LIKE '%'+@Word1+'%' OR Category LIKE '%'+@Word1+'%' OR SearchWords LIKE '%'+@Word1+'%')
        OR (Name LIKE '%'+@Word2+'%' OR Description LIKE '%'+@Word2+'%' OR Category LIKE '%'+@Word2+'%' OR SearchWords LIKE '%'+@Word2+'%')
        OR (Name LIKE '%'+@Word3+'%' OR Description LIKE '%'+@Word3+'%' OR Category LIKE '%'+@Word3+'%' OR SearchWords LIKE '%'+@Word3+'%')
        OR (Name LIKE '%'+@Word4+'%' OR Description LIKE '%'+@Word4+'%' OR Category LIKE '%'+@Word4+'%' OR SearchWords LIKE '%'+@Word4+'%')
        OR (Name LIKE '%'+@Word5+'%' OR Description LIKE '%'+@Word5+'%' OR Category LIKE '%'+@Word5+'%' OR SearchWords LIKE '%'+@Word5+'%')
        OR (Name LIKE '%'+@Word6+'%' OR Description LIKE '%'+@Word6+'%' OR Category LIKE '%'+@Word6+'%' OR SearchWords LIKE '%'+@Word6+'%')
        OR (Name LIKE '%'+@Word7+'%' OR Description LIKE '%'+@Word7+'%' OR Category LIKE '%'+@Word7+'%' OR SearchWords LIKE '%'+@Word7+'%')
        OR (Name LIKE '%'+@Word8+'%' OR Description LIKE '%'+@Word8+'%' OR Category LIKE '%'+@Word8+'%' OR SearchWords LIKE '%'+@Word8+'%')
        OR (Name LIKE '%'+@Word9+'%' OR Description LIKE '%'+@Word9+'%' OR Category LIKE '%'+@Word9+'%' OR SearchWords LIKE '%'+@Word9+'%')
        OR (Name LIKE '%'+@Word10+'%' OR Description LIKE '%'+@Word10+'%' OR Category LIKE '%'+@Word10+'%' OR SearchWords LIKE '%'+@Word10+'%')

IF @AllWords = 1
    SELECT Products.ProductID, Products.[Name], Products.[Description], Products.Price, Products.Category, Products.CategoryID, Products.SearchWords
    FROM Products
    WHERE (Name LIKE '%'+@Word1+'%' OR Description LIKE '%'+@Word1+'%' OR Category LIKE '%'+@Word1+'%' OR SearchWords LIKE '%'+@Word1+'%')
        AND (Name LIKE '%'+@Word2+'%' OR Description LIKE '%'+@Word2+'%' OR Category LIKE '%'+@Word2+'%' OR SearchWords LIKE '%'+@Word2+'%' OR @Word2 IS NULL)
        AND (Name LIKE '%'+@Word3+'%' OR Description LIKE '%'+@Word3+'%' OR Category LIKE '%'+@Word3+'%' OR SearchWords LIKE '%'+@Word3+'%' OR @Word3 IS NULL)
        AND (Name LIKE '%'+@Word4+'%' OR Description LIKE '%'+@Word4+'%' OR Category LIKE '%'+@Word4+'%' OR SearchWords LIKE '%'+@Word4+'%' OR @Word4 IS NULL)
        AND (Name LIKE '%'+@Word5+'%' OR Description LIKE '%'+@Word5+'%' OR Category LIKE '%'+@Word5+'%' OR SearchWords LIKE '%'+@Word5+'%' OR @Word5 IS NULL)
        AND (Name LIKE '%'+@Word6+'%' OR Description LIKE '%'+@Word6+'%' OR Category LIKE '%'+@Word6+'%' OR SearchWords LIKE '%'+@Word6+'%' OR @Word6 IS NULL)
        AND (Name LIKE '%'+@Word7+'%' OR Description LIKE '%'+@Word7+'%' OR Category LIKE '%'+@Word7+'%' OR SearchWords LIKE '%'+@Word7+'%' OR @Word7 IS NULL)
        AND (Name LIKE '%'+@Word8+'%' OR Description LIKE '%'+@Word8+'%' OR Category LIKE '%'+@Word8+'%' OR SearchWords LIKE '%'+@Word8+'%' OR @Word8 IS NULL)
        AND (Name LIKE '%'+@Word9+'%' OR Description LIKE '%'+@Word9+'%' OR Category LIKE '%'+@Word9+'%' OR SearchWords LIKE '%'+@Word9+'%' OR @Word9 IS NULL)
        AND (Name LIKE '%'+@Word10+'%' OR Description LIKE '%'+@Word10+'%' OR Category LIKE '%'+@Word10+'%' OR SearchWords LIKE '%'+@Word10+'%' OR @Word10 IS NULL)
RETURN
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:54 #26
men det kunne være fed hvis vi fandt ud af og bruge et datagrids row id ting der. Bre for at vide det

Og damm jeg troede ikke lige min SP fyldte så meget!  Ups..... håber ikke det gør noget :-(
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 13:59 #27
vent!!!!!!!!!!!

Det virker det her, det virker fandme! JJHHIIAA!!!!

Sub Item_Bound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
  e.Item.Cells(0).Text = e.Item.ItemIndex + 1
End Sub

Det eneste den gør er at den viser et 0 til sidst! :-(  og så ikke den anden kollone!
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 14:04 #28
Så nu er det eneste problem jeg har, at der står et 0 nede i bunden af datagrided som det sidste resultat!

:-(

Hvordan kommer jeg af med den?
Avatar billede midas_dk Nybegynder
30. januar 2003 - 14:07 #29
Okay...

If e.Item.ItemIndex < dg.Items.Count Then
  e.Item.Cells(0).Text = e.Item.ItemIndex + 1
End If
Avatar billede midas_dk Nybegynder
30. januar 2003 - 14:09 #30
Men som sagt bliver det noget skidt, så snart der kommer paging på - men den tid, den sorg!
Avatar billede burningice Nybegynder
30. januar 2003 - 14:13 #31
midas_dk>> det der med det paging må du altså lige foklare igen... hvorfor er det at det ikke vil du... sådan som det er nu, sørger Item_Bound for at skrive indexnr'et + 1 i den første celle i hver række. Dette burde da ikke blive forstyrret af paging ?!
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 14:19 #32
>> cyberfessor og midas_dk

jeg har lige prøvet med paging, det vil den ikke:

<asp:datagrid                            allowcustompaging="True"
                                        allowpaging="True"
                                        onpageindexchanged="GridPageChange"
                                        pagesize="10"
                                        onitemdatabound="Item_Bound"
                                        id="dgSearchResult"
                                        cellpadding="0"
                                        cellspacing="20"
                                        enableviewstate="false"
                                        AutoGenerateColumns="false"
                                        showheader="False"
                                        showfooter="True"                                       
                                        runat="Server"
                                        gridlines="None"
                                        >
den siger 0! :-(
Avatar billede midas_dk Nybegynder
30. januar 2003 - 14:23 #33
Nej, det er pagingen, der bliver forstyrret! e.Item.Cells(0) refererer ikke kun til databound celler, men til den første <td> i samtlige <tr>, som bliver genereret af DataGrid'et... Derfor: hvis man som jeg har paging-dimsen i den sidste <tr> i grid'et, og den i øvrigt kun fylder én <td>, så bliver indholdet af selv samme <td> overskrevet ved brug af e.Item.Cells(0) kommandoen!

Det KAN forresten da godt ha' noget at gøre med at koden eksekveres OnItemCreated og ikke OnItemDataBound, eller hvad det nu hedder...
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 14:27 #34
jeg bruger onitemdatabound="Item_Bound"

:-(
Avatar billede midas_dk Nybegynder
30. januar 2003 - 14:28 #35
Så fatter jeg nada... Siger den 0 i den sidste række, eller i alle rækker?
Avatar billede burningice Nybegynder
30. januar 2003 - 14:30 #36
uhm... hvad hvis man bruger den kode jeg havde skrevet

dg.items(e.item.itemindex).cells(0).Text

Den burde da kun overskrive cellen i den række som er det bliver bindet?

(jeg har desværre ikke mulighed for at teste det selv, det er derfor jeg er lidt usikker)
Avatar billede midas_dk Nybegynder
30. januar 2003 - 14:34 #37
Hov, ja, det kan da godt være! Ja, du har nok ret - dg.items indeholder vel kun databound items! Prøv det, bg! Nu må jeg desværre forlade jer *G* (for i dag, altså)...
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 14:40 #38
>> cyberfessor hvad mener midas_dk med det her:

dg.items indeholder vel kun databound items! Prøv det ??????
Avatar billede burningice Nybegynder
30. januar 2003 - 15:18 #39
at dg.items jo indeholder en collection over ALLE dine items i datagriddet, og derfor råder han dig til at prøve min kode

dg.items(e.item.itemindex)

da den kun tager fat i det item som der bliver bindet... det gør at når du f.eks. bruger paging, så vil koden Item_Bound jo kun blive kørt for de 10 eller 20 items som bliver vist på siden.
Avatar billede burningice Nybegynder
30. januar 2003 - 15:21 #40
sådan burde det i hvert fald være i teorien... om det rent faktisk fungerer sådan i praksis, det må du jo lige prøve af ;)
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 15:30 #41
okay.....

>> cyberfessor jeg takker mange gange for din, jeg vil gerne give dig ekstra points.

Men vil du så ikke lige smide dit forslag i min kode her:

Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
  e.Item.Cells(0).Text = e.Item.ItemIndex + 1 & "."
End Sub

På forhånd tak! :-)
Avatar billede bambinogrande Nybegynder
30. januar 2003 - 15:33 #42
Også har jeg stadig problemer med det tomme 0 som bliver vist i bunden af søge resultatet!

:-( øv
Avatar billede burningice Nybegynder
30. januar 2003 - 16:18 #43
mon ikke det er sådan her

Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
  dgSearchResult.Items(e.Item.ItemIndex).Cells(0).Text = e.Item.ItemIndex + 1 & "."
End Sub
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 09:41 #44
Go morgen........

har prøvet med dit eksempel ovenover, men den siger følgende fejl :-(

Error:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Avatar billede burningice Nybegynder
31. januar 2003 - 09:52 #45
bg>> prøv at sæt en lille tjek ind først

Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
  If Not e.Item.ItemIndex = -1 Then
    dgSearchResult.Items(e.Item.ItemIndex).Cells(0).Text = e.Item.ItemIndex + 1 & "."
  End If
End Sub
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 09:56 #46
Det fatter jeg ikke

stadig:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

:-(
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 10:01 #47
hvad sker der med eksperten der, de sidste tre indlæg er blanke hos mig!
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 10:05 #48
Det tjek der hjælper ikke noget:

  Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
        If Not e.Item.ItemIndex = -1 Then
            dgSearchResult.Items(e.Item.ItemIndex).Cells(0).Text = e.Item.ItemIndex + 1 & "."
        End If
    End Sub
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 10:12 #49
Det er for sært.......... hvor fanden kommer det nul der fra!

selv om søge resultatet er 0, så viser den det 0 der i indexet.
Avatar billede burningice Nybegynder
31. januar 2003 - 10:15 #50
bambinogrande>> har du et link til din side, og evt. noget kode jeg kan teste og lege lidt med selv til jeg får det til at virke... :) det er lidt nemmere end hele tiden at poste et indlæg hver gang der skal ændres lidt ;)
Avatar billede burningice Nybegynder
31. januar 2003 - 10:16 #51
der er forresten et eksempel her på hvordan man kan ændrer celler runtime (det er jo det vi vil :))

http://www.tanguay.info/item.aspx?i=6810
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 10:22 #52
Okay det er for fed du gider det! ;-)

Jeg fatter bare ikke hvor det 0 der kommer fra, men her kommer mit kode. Du kan selv hurtigt lige fylde datagrided med lidt Db data ikke?

-----------------------------------------------------------------
Search.aspx

<asp:datagrid                                   
                                        id="dgSearchResult"
                                        cellpadding="0"
                                        cellspacing="20"
                                        enableviewstate="false"
                                        AutoGenerateColumns="false"
                                        showheader="False"
                                        showfooter="True"                                       
                                        onitemdatabound="Item_Bound_Count"
                                        gridlines="None"                                       
                                        runat="Server"
                                        >                                   
                                        <columns>
                                            <asp:templatecolumn itemstyle-font-bold="True" itemstyle-verticalalign="Top" >
                                                <itemtemplate>
                                                    <!-- En kollone til "Count" funktionen, som datagrided udfører -->   
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                            <asp:templatecolumn Visible="True">
                                                <itemtemplate>
                                                    <asp:hyperlink cssclass="underLine"
                                                        id="HyperLink1"
                                                        runat="server"
                                                        text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'
                                                        navigateurl='<%# "Products.aspx?PageID=3&ProductID=" & DataBinder.Eval(Container.DataItem, "ProductID") %>'
                                                    />
                                                    <br />
                                                    <asp:label id="Label1" text="Kateogri: " font-bold="True" runat="server" />
                                                    <asp:label id="Label2" text='<%# DataBinder.Eval(Container.DataItem, "Category") %>' runat="server" />
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                        </columns>
                                    </asp:datagrid>
-------------------------------------------------------------------------
Search.aspx.vb

Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
        If Not e.Item.ItemIndex = -1 Then
            dgSearchResult.Items(e.Item.ItemIndex).Cells(0).Text = e.Item.ItemIndex + 1 & "."
        End If
    End Sub
Avatar billede bambinogrande Nybegynder
31. januar 2003 - 11:46 #53
>> Cyberfessor!

Hvis søgningen intet resultat giver, så virker din if sætning.

Men hvis der er resultat(r) i søgningen så virker den ikke:

Error:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

:-(
Avatar billede burningice Nybegynder
01. februar 2003 - 16:50 #54
bg>> hmm.. hvad så med

  Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
        If e.Item.ItemIndex => 0 Then
            dgSearchResult.Items(e.Item.ItemIndex).Cells(0).Text = e.Item.ItemIndex + 1 & "."
        End If
    End Sub

jeg har ikke fået leget med det selv, da jeg ikke lige har haft adgang til en webserver, så det bliver nok først på mandag :(
Avatar billede bambinogrande Nybegynder
03. februar 2003 - 10:03 #55
Go morgen..........haft en god weekend?

Øv den kommer med samme fejl! :-(

Håber du vil kigge lidt på det i dag eller i denne uge,-  :-)

Caiuo

/BG
Avatar billede burningice Nybegynder
04. februar 2003 - 14:30 #56
god... erm... eftermiddag... ;) jeg er ved at kigge på det, men det VS driller med oprettelse af webproject, da jeg ikke umiddelbart har adgang til en webserver... åndsvagt og pisse irreterende...

det burde de lave om i en SP, at VS ikke KRÆVER at man har en webserver ved hånden når man vil oprette et webproject :(
Avatar billede burningice Nybegynder
05. februar 2003 - 10:16 #57
bg> så har jeg fået det til at virke... jeg har dog et lille spm ang. paging... skal den starte fra 1 igen på hver side, eller skal det være sådan at når man er på side 10 med 5 records pr side, så skal den starte fra 50 ?
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 10:20 #58
Hejsa,-

For FEDT!!!!!!!!!!!!!!

Prøv bare med side 1. ;-)
Avatar billede burningice Nybegynder
05. februar 2003 - 10:22 #59
hehe... nå, det tog sq heller ikke så lang tid at få til at virke... det med at den skal starte på nr 50 på side 10 ;)

u want some code?
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 10:27 #60
så tager vi nr 50 på side 10 :-)!

Det skal du ikke lave om så!

ja tak...... på mail, hvis du vil.

lvd@telesb.dk
Avatar billede burningice Nybegynder
05. februar 2003 - 10:31 #61
det viste sig at jeg ikke kunne bruge e.item.itemindex til en skid, da header og footer havde et index på -1 og når jeg samtidig skulle tage højde for at itemindex starter fra nul, mens tælleren på antal items i datagriddet starter på et, blev det noget værre bøvl.
Det endte derfor med at jeg calculerede itemindex'et udfra antal items i datagriddet, trak en fra og checkede om værdien lå under 0... i så fald skal hele operationen afbrydes.
Recordnummeret beregnede jeg bagefter ud fra antal items på siden. Hvis paging er slået til skal der lige lægges antalrecords pr side*sidenummeret til recordnummeret...
når alt dette er gjort så kan vi bruge index til at skrive recordnummeret ud i celle nul i det den rigtige linje :)

fuck hvor er jeg dårlig til at forklare sådan noget... tror hellere du må få noget kode isetdet ;) (den er desværre i c#, men jeg håber du fanger pointen i det alligevel)
Avatar billede burningice Nybegynder
05. februar 2003 - 10:35 #62
public void Item_Bound(object sender, DataGridItemEventArgs e)
        {
            //antal items på siden (stiger for hver gang Item_Bound bliver kørt)
            int count = dgSearchResult.Items.Count;       
           
            //beregner index ud fra count
            int index = count - 1;                       
           
            //hvis index er under nul skal proceduren afbrydes
            if (index < 0)                               
            {
                return;
            }
           
            //beregner recordnr ud fra count
            int recordnr = count;                       
           
            //hvis paging er slået til skal vi huske at lægge det antal records til som er på de foregående sider
            if (dgSearchResult.AllowPaging || dgSearchResult.AllowCustomPaging)
            {
                int recordsprpage = dgSearchResult.PageSize;
                int page = dgSearchResult.CurrentPageIndex;
                recordnr += (page*recordsprpage);
            }
           
            //skriver recordnr ud i celle 0 i den rigtige linjer, fundet ud fra index
            dgSearchResult.Items[index].Cells[0].Text += recordnr.ToString();
        }
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 10:41 #63
for fee.....

Nej det var en god forklaring! :-)

jeg prøver lige at smide den ind.

Du hører fra mig Cyberfessor.

jjhhiiiaaaaaaaaaaa!!!!!!!!!!!
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 10:54 #64
Den her kan jeg ikke oversætte:      :-(

Hvad betyder ||

If dgSearchResult.AllowPaging || dgSearchResult.AllowCustomPaging Then
      int recordsprpage = dgSearchResult.PageSize;
      int page = dgSearchResult.CurrentPageIndex;
      recordnr += (page*recordsprpage);
End If

Og hvordan ser dit datagrid kode ud?
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 11:03 #65
dam.......

Jeg starter lige fra en ende af, med ting jeg ikke kan løse:

'beregner index ud fra count
e.Item.ItemIndex = Count - 1

Error: "Property ItemIndex is ReadOnly"

??? :-(

Ellers ser min Sub foreløbig sådan her ud:

Public Sub Item_Bound_Count(ByVal sender As Object, ByVal e As DataGridItemEventArgs)

        'antal items på siden (stiger for hver gang Item_Bound bliver kørt)
        Dim Count As Integer
        Count = dgSearchResult.Items.Count

        'beregner index ud fra count
        e.Item.ItemIndex = Count - 1

        'hvis index er under nul skal proceduren afbrydes
        If e.Item.ItemIndex < 0 Then
            Return
        End If

        'beregner recordnr ud fra count
        Dim Recordnr As Integer
        Recordnr = Count

        Dim recordsprpage As Integer
        Dim varPage As ???
        'hvis paging er slået til skal vi huske at lægge det antal records til som er på de foregående sider
        If dgSearchResult.AllowPaging || dgSearchResult.AllowCustomPaging Then
            recordsprpage = dgSearchResult.PageSize
            varPage = dgSearchResult.CurrentPageIndex
            Recordnr += (Page * recordsprpage)
        End If

        'skriver recordnr ud i celle 0 i den rigtige linjer, fundet ud fra index
        dgSearchResult.Items(index).Cells(0).Text += Recordnr.ToString()
    End Sub
Avatar billede burningice Nybegynder
05. februar 2003 - 11:27 #66
nej nej nej.. jeg skrev jo at jeg ikke kunne bruge itemindex til en skid ;)

int index = count - 1;       

er vist det samme som

Dim index As Integer = count - 1;

int Count = 1 er det samme som
Dim Count As Integer = 1

|| betyder OR...
+= betyder vist Recordnr = Recordnr +
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 11:31 #67
Okay......... sorry :-( er rettet.

Den sidste:

Dim varPage As ???

varPage = dgSearchResult.CurrentPageIndex
Avatar billede burningice Nybegynder
05. februar 2003 - 11:31 #68
prøv det her

//antal items på siden (stiger for hver gang Item_Bound bliver kørt)
            Dim count As Integer = dgSearchResult.Items.Count;       
           
            //beregner index ud fra count
            Dim index As Integer = count - 1;                       
           
            //hvis index er under nul skal proceduren afbrydes
            If index < 0 Then                           
                return;
            End If
           
            //beregner recordnr ud fra count
            Dim recordnr As Integer = count;                       
           
            //hvis paging er slået til skal vi huske at lægge det antal records til som er på de foregående sider
            If dgSearchResult.AllowPaging Or dgSearchResult.AllowCustomPaging Then
                Dim recordsprpage As Integer = dgSearchResult.PageSize;
                Dim page As Integer = dgSearchResult.CurrentPageIndex;
                recordnr = recordnr + (page*recordsprpage);
            }
           
            //skriver recordnr ud i celle 0 i den rigtige linjer, fundet ud fra index
            dgSearchResult.Items[index].Cells[0].Text += recordnr.ToString();
Avatar billede burningice Nybegynder
05. februar 2003 - 11:32 #69
fårk hvor jeg tåger... fjern alle ;'erne og

dgSearchResult.Items[index].Cells[0].Text += recordnr.ToString();

skal bare være

dgSearchResult.Items[index].Cells[0].Text = recordnr.ToString();
Avatar billede burningice Nybegynder
05. februar 2003 - 11:33 #70
aaarg... jeg gider snart ikke mere ;)

dgSearchResult.Items[index].Cells[0].Text = recordnr.ToString();

skal være

dgSearchResult.Items(index).Cells(0).Text = recordnr.ToString()
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 11:38 #71
YEP............. fixed! :-)

Du skal nok for en masse points Cyberfessor!

Hvad skal jeg smide i mit datagrid:

<asp:datagrid allowcustompaging="True"  allowpaging="True"                                    
                                        id="dgSearchResult"
                                        cellpadding="0"
                                        cellspacing="20"
                                        enableviewstate="false"
                                        AutoGenerateColumns="false"
                                        showheader="False"
                                        showfooter="True"                                       
                                        onitemdatabound="Item_Bound_Count"
                                        gridlines="None"                                       
                                        runat="Server"
                                        >                                   
                                        <columns>
                                            <asp:templatecolumn itemstyle-font-bold="True" itemstyle-verticalalign="Top" >
                                                <itemtemplate>
                                                    <!-- En kollone til "Count" funktionen, som datagrided udfører -->   
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                            <asp:templatecolumn Visible="True">
                                                <itemtemplate>
                                                    <asp:hyperlink cssclass="underLine"
                                                        id="HyperLink1"
                                                        runat="server"
                                                        text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'
                                                        navigateurl='<%# "Products.aspx?PageID=3&ProductID=" & DataBinder.Eval(Container.DataItem, "ProductID") %>'
                                                    />
                                                    <br />
                                                    <asp:label id="Label1" text="Kateogri: " font-bold="True" runat="server" />
                                                    <asp:label id="Label2" text='<%# DataBinder.Eval(Container.DataItem, "Category") %>' runat="server" />
                                                </itemtemplate>
                                            </asp:templatecolumn>
                                        </columns>
                                    </asp:datagrid>
Avatar billede burningice Nybegynder
05. februar 2003 - 12:03 #72
hvad mener du med hvad du skal smide i dit datagrid?? det skulle da gerne bare virke
Avatar billede burningice Nybegynder
05. februar 2003 - 12:04 #73
mit datagrid, som jeg testede på så sådan her ud

            <asp:datagrid id="dgSearchResult" cellpadding="0" cellspacing="20" AutoGenerateColumns="False" showheader="False" onitemdatabound="Item_Bound" runat="Server">
                <Columns>
                    <asp:TemplateColumn>
                        <ItemStyle Font-Bold="True" VerticalAlign="Top"></ItemStyle>
                        <ItemTemplate>
                            <!-- En kollone til "Count" funktionen, som datagrided udfører -->
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn>
                        <ItemTemplate>
                            <asp:hyperlink id="HyperLink1" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' navigateurl='<%# "Products.aspx?PageID=3&ProductID="+ DataBinder.Eval(Container.DataItem, "ProductID") %>' />
                            <br />
                            <asp:label id="Label3" text="Kateogri: " font-bold="True" runat="server" />
                            <asp:label id="Label4" text='<%# DataBinder.Eval(Container.DataItem, "Category") %>' runat="server" />
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
                <PagerStyle Mode="NumericPages"></PagerStyle>
            </asp:datagrid>
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 12:07 #74
Nej jeg tåger........

Det eneste lille problem der er med koden, er at tælleren starter med 11 og springer den med 11 af gangen.

11.

22.

33.

44.

55.

66.

ovs??? :-(
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 12:10 #75
VENT!!!

Det er mig der tåger for vildt! Idiot jeg er mand...........

Havde smidt den linje her: dgSearchResult.Items(index).Cells(0).Text = recordnr.ToString() ind 2 gange!

FLOT mand....... :-(

Det virker totalt! Nu skal jeg bare lige have lavet lidt paging på.

Jeg siger 1000 tak for hjælpen. Hvor mange points vil du have?
Avatar billede burningice Nybegynder
05. februar 2003 - 12:36 #76
hehe... fair nok... ;) ang. paging skulle min kode meget gerne være forberedt til det... det virkede i hvert fald da jeg testede det :)
Avatar billede burningice Nybegynder
05. februar 2003 - 12:38 #77
hmm.. point... skide være med dem.. jeg kan se at du ikke har alverdens, så jeg tror du har mere brug for dem end jeg har ;) 15 point og et accepteret svar er fint for mig :)
Avatar billede bambinogrande Nybegynder
05. februar 2003 - 12:51 #78
Hehe.......... ja points har jeg ikke mange af! :-(

Men hvad fanden,- det kommer nok.

Tak for din tid Cyberfessor! ;-)
Avatar billede burningice Nybegynder
05. februar 2003 - 13:05 #79
bambinogrande>> det var så... uhm.. nej, det var alligevel en hel del... men hvad... jeg fik da også lært noget, så det er sårn som det skal være :)
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