Avatar billede hulla Novice
29. oktober 2002 - 09:27 Der er 7 kommentarer og
1 løsning

variabel tabel opbygning

hej!

Jeg er i gang med at opbygge en tabel dynamisk alt efter hvor mange data jeg får fra min Db (MsSqlServer).

det virker sådan set også fint, men ikke særlig smart kode :(

sådan ser det ud:

Do Until datRead.Read = False
                rowSearch = New TableRow()
                cellSearch = New TableCell()
                cellSearch2 = New TableCell()
                Try
                    cellSearch.Text = datRead.GetString(0)
                Catch
                End Try
                Try
                    cellSearch2.Text = datRead.GetString(1)
                Catch
                End Try

                rowSearch.Cells.Add(cellSearch)
                rowSearch.Cells.Add(cellSearch2)
                tblSearch.Rows.Add(rowSearch)
            Loop
            plcSearchTable.Controls.Add(tblSearch)

Det skal vel laves i nogle flere løkker,. men lige hvordan??

Derudover vil jeg gerne have at hver celle bliver til et link,. hvordan gøres det ?

Håber en her kan hjælpe mig :)
Avatar billede askhoej Praktikant
29. oktober 2002 - 09:55 #1
Må man spørge hvorfor du ikke bruger en ASP:Repeater?

/askhoej
Avatar billede hulla Novice
29. oktober 2002 - 10:40 #2
fordi jeg ikke kender til den,... og jeg kan heller ikke bruge det hvis der så kommer en lang indviklet forklaring fra dig nu :)
Det skal være simpelt og forståeligt,..jeg vil vide hvad jeg gør
Avatar billede askhoej Praktikant
29. oktober 2002 - 10:54 #3
Der findes masser af eksempler på ASP:Repeater i både SDK'en og hvis du søger på Google.com. Det du har gang i der virker utrolig rodet!

et hurtigt og kort eksempel på en repeater:

<script runat="server" language="C#">
private void Page_Load(object sender, System.EventArgs e)
{
  rptSearchResult.DataSource = ds; //Dit dataSet med data fra DB
  rptSearchResult.DataBind();
}
</script>
<form runat="server">
<asp:Repeater ID="rptSearchResult" Runat="server">
  <HeaderTemplate>
    <table id="tblSearch">
  </HeaderTemplate>
  <ItemTemplate>
    <tr>
      <td><%#DataBinder.Eval(Container.DataItem, "navn på kolonne fra dataset").ToString()%></td>
      <td><%#DataBinder.Eval(Container.DataItem, "navn på en anden kolonne fra dataset").ToString()%></td>
    </tr>
  </ItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>
</form>

/askhoej
Avatar billede bongo20 Nybegynder
29. oktober 2002 - 11:38 #4
jeg har prøvet noget lignende nu askhoej,. men det virker ikke og jeg fatter heller ikke en skid af det,..
Kan du ikke istedet fortælle mig hvordan jeg får lavet de enkelte items jeg får over i min egen tabel til et link ?  :)
Avatar billede askhoej Praktikant
29. oktober 2002 - 11:54 #5
Nu ved jeg ikke om det er æbler eller elefanter du henter fra din database, men prøv noget ala:

Try
cellSearch.Text = "<a href='url.aspx'>" & datRead.GetString(0) & "</a>"
Catch
End Try

/askhoej
Avatar billede hulla Novice
29. oktober 2002 - 12:14 #6
det virker glimrende det der,.

Kan det passe hvis jeg siger at det er lidt nemmere at arbejde med Datagrid end med din Repeater ?  :)
Avatar billede askhoej Praktikant
29. oktober 2002 - 12:49 #7
Jeg vil mene at DataGrid er en noget mere omfattende kontrol end Repeateren. Men finder ikke nogen af den særlig svære at arbejde med.

/Askhoej
Avatar billede even.dk Nybegynder
01. november 2002 - 12:01 #8
Det nemmeste vil helt klart være at bruge en DataGrid. Den laver nemlig gennemløbet af din DataReader for dig og den har masser af avancerede muligheder. DataGrid'en laver automatisk en HTML tabel og kan endda lave header og footer, den kan styre sideskift hvis du fx kun vil vise 10 poster pr. side.

Hvordan gør du så? (I VB.NET)

1. Tilføj flg. kode til din HTML side:
<asp:datagrid id="DataGrid1" runat="server"></asp:datagrid>

2. I stedet for din løkke med "do untill ... repeat" skriver du:
DataGrid1.DataSource = datRead
DataGrid1.DataBind()

Når du nu kører din side vil der være en en tabel, der indeholder alle felter og alle poster fra din DataReader.

Hvis du gerne vil begrænse antallet af felter, kan du skrive ( inden DataGrid1.DataBind() ):

Dim myHyperLinkColumn As New Web.UI.WebControls.HyperLinkColumn()
Dim myColumn As New Web.UI.WebControls.BoundColumn()

DataGrid1.AutoGenerateColumns = False

myHyperLinkColumn.DataNavigateUrlField = "Id" ' Navn på ID i databasen
myHyperLinkColumn.DataNavigateUrlFormatString = "details.aspx?id={0}"
' navnet på den side der skal kaldes
myHyperLinkColumn.DataTextField = "xxx"
' Navnet på det felt, hvis værdi der skal skrives i feltet
myHyperLinkColumn.DataTextFormatString = "{0:c}" ' sådan skal det bare være
DataGrid1.Columns.Add(myHyperLinkColumn)

myColumn.DataField = "xxx" ' Navnet på feltet i databasen
myColumn.HeaderText = "xxx" ' Overskrift til feltet
DataGrid1.Columns.Add(myColumn)

Du kan evt. checke hjælpen til DataGrid på http://msdn.microsoft.com hvis du vil vide mere...
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