Avatar billede t-rex Nybegynder
07. december 2006 - 14:10 Der er 5 kommentarer og
1 løsning

Overførelse af Array´s

Hey

jeg sidder med et lille problem. jeg har i Default.aspx.cs lavet nogle udtræk fra en Access database der bliver gemt i et Array som hedder Heading. Alt dette sker i Page_Load men når jeg gøre sådan kan jeg ikke bruge Arrayét i Default.aspx (Code) hvordan gør man det?

eks:
<%
While (i < 9)
{
%>
<asp:Label ID="Label1" runat="server" Text=""> <% Heading[i].toString(); %> </asp:Label>
<%
i++;
}
%>
Sådan ville jeg mene det skulle laves men nej :-)
Avatar billede sneakraid Nybegynder
07. december 2006 - 15:17 #1
Jeg tror du har misforstået lidt af konceptet ved asp.net. Ser ud som om du kommer fra alm. asp? :)

I stedet for at bruge et array, kan du jo bruge en DataReader i stedet og binde den til en Repeater f.eks.

Codebehind:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|mindatabase.mdb;User Id=admin;Password=;");
OleDbCommand cmd = new OleDbCommand("SELECT [NewsSubject] FROM [News]", conn);
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Repeater1.DataSource = reader;
Repeater1.DataBind();

Default.aspx (source):

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <%# Eval("NewsSubject") %>
    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>
Avatar billede t-rex Nybegynder
07. december 2006 - 21:51 #2
Ja det må jeg nu nok sige jeg er ikke alt for god til dette ASP.Net i nu det er noget som vi lærer på skolen men min lære er ikke lige så god til at forklare :-)

Det virker fedt det du har lavet her men den siger jeg har en forkert sti til databasen. Min database ligger C:\test\database.mdb. hvordan skal jeg skrive det så den kan forstå det...
Avatar billede t-rex Nybegynder
07. december 2006 - 23:13 #3
og lige en ting mere. Hvordan laver man så en if sætning hvis man har to tabeller i dbén Den ene indeholder en overskrift og den anden indholder en masse fil navne som så skal stå under den rigtig overskrift... håber du kan forstå det jeg prøver at beskrive :-)
Avatar billede sneakraid Nybegynder
08. december 2006 - 00:14 #4
Jeg synes nu os det var svært at vænne sig til den nye tankegang, når man er vant til alm. asp. Men det kommer med tiden. Jeg kan evt. anbefale dig at købe lidt bøger (beginning bøger helst) omkring det, så kommer du langt vil jeg mene.

Anyway, måden du så skal skrive din sti til database er faktisk simpel:

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test\database.mdb;User Id=admin;Password=;");

Bemærk det @ jeg har sat før selve connectionstring, det er fordi C# regner med der kommer et tegn når der bliver skrevet en '\'. Men det kan du læse mere om her: http://www.softsteel.co.uk/tutorials/cSharp/lesson4.html - under "Escape Sequences and Verbatim Strings"

Det andet du snakker om, kan du f.eks. løse med nested repeaters. Det har jeg lavet en lille eksempel på som du kan se her:

Default.aspx:

<asp:Repeater ID="parentRepeater" runat="server">
    <ItemTemplate>
        <b>
            <%# DataBinder.Eval(Container.DataItem,"[linkcategoryname]") %>
            : </b><br />
        <asp:Repeater ID="childRepeater" DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'
            runat="server">
            <ItemTemplate>
                &nbsp;&nbsp;&nbsp;<a href='<%# DataBinder.Eval(Container.DataItem, "[linkhref]")%>'
                    target="_blank">
                    <%# DataBinder.Eval(Container.DataItem, "[linkname]")%>
                </a>
            </ItemTemplate>
            <SeparatorTemplate>
                <br />
            </SeparatorTemplate>
        </asp:Repeater>
        <br />
        <br />
    </ItemTemplate>
</asp:Repeater>

Husk lige at import System.Data namespacet i toppen af siden, ellers vil det ikke virke: <%@ Import Namespace="System.Data" %>

Codebehind:

using System;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default : System.Web.UI.Page
{
    public Default()
    {
        Page.Init += new System.EventHandler(Page_Init);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // connection til db.
        OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|nira.mdb;User Id=admin;Password=;");
        try
        {
            // DataAdapter til at "fylde" tabellen i DataSet.
            OleDbDataAdapter cmd1 = new OleDbDataAdapter("select * from linkcategory", con);

            // Første DataSet fyldes med tabellen LinkCategory fra db.
            DataSet ds = new DataSet();
            cmd1.Fill(ds, "linkcategory");

            // Anden DataAdapter til at "fylde" tabellen Links i DataSet.
            OleDbDataAdapter cmd2 = new OleDbDataAdapter("select * from links", con);
            cmd2.Fill(ds, "links");

            // Luk connection
            con.Close();

            // Opret en relation mellem de 2 tabeller som nu ligger i datasettet.
            // Forestil dig dataset som en slags database i hukommelsen (i dine ram)
            // Grunden til jeg bruger dette er fordi alm. db arbejde er normalt det som
            // man refererer som tungt arbejde på serveren, så det er med at holde os til
            // så lidt db adgang som muligt. At læse fra hukommelsen er hurtigere.
            // "myrelation" er bare navnet på selve relationen, som vi skal bruge i Source
            // på Default.aspx.
            ds.Relations.Add("myrelation", ds.Tables["linkcategory"].Columns["linkcategoryid"], ds.Tables["links"].Columns["linkcategoryid"]);

            // Binde tabellen LinkCategory til den 1. repeater.
            parentRepeater.DataSource = ds.Tables["linkcategory"];
            Page.DataBind();
        }
        catch (Exception err)
        {
            Response.Write("Error: " + err.Message.ToString());
        }
    }
    private void Page_Init(object sender, EventArgs e)
    {
        InitializeComponent();
    }
    private void InitializeComponent()
    {
        this.Load += new System.EventHandler(this.Page_Load);
    }
}
Avatar billede t-rex Nybegynder
09. december 2006 - 13:31 #5
jeg takker meget for din hjælp. smider du et svar :-)
Avatar billede sneakraid Nybegynder
09. december 2006 - 14:26 #6
:)
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