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...
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?
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 }
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...
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()
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?
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"
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)
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
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
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?
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...
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
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 ?!
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...
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å)...
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.
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
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
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
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 ;)
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
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 :(
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 :(
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 ?
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)
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(); }
If dgSearchResult.AllowPaging || dgSearchResult.AllowCustomPaging Then int recordsprpage = dgSearchResult.PageSize; int page = dgSearchResult.CurrentPageIndex; recordnr += (page*recordsprpage); End If
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
//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();
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 :)
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 :)
Synes godt om
Ny brugerNybegynder
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.