Avatar billede filix Nybegynder
25. marts 2007 - 11:14 Der er 12 kommentarer

Speciel udtag af database

Hey

Jeg sidder og laver en hold liste for en svømme klub hvor pointen er at de skal kunne se deres stævner delt op i hold. Når man ikke vælger noget i listen skal den jo vise alle stævner(men det er ikke alle stævner som alle skal med til så derfor er der nogen af stævnerne hvor den bare skal vise de forskellige hold der skal med, men stadig alle.)
sådan ser min database ud.
http://www.rasmusfjord.dk/db.jpg

Det jeg har prøvet er og lave en inner joint i min db command, også spytte det hele ud i en repeater for at den så viser det.

Men den fejl den gør er at at poste for mange antal af hver stævne.

Så hvis der er 1 stævne med 4 forskellige hold til, viser den stævnet 4 gange og med hver sin hold tilknytning.

Min kode for siden er :
Default.aspx
-------------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>STE stævne generator</h1>
        <asp:Repeater ID="Rep1" runat="server">
        <HeaderTemplate><table></HeaderTemplate>
        <ItemTemplate>
        <tr>
            <td>
            <%# Eval("ST_Navn") %>
            </td>
           
            <td>
            <%# Eval("ST_Dato_Start") %>
            </td>
           
            <td>
            <%# Eval("ST_Dato_Slut") %>
            </td>
           
            <td>
            <%# Eval("ST_Arrangoer") %>
            </td>
           
            <td>
            <%# Eval("ST_Indsvoem") %>
            </td>
           
            <td>
            <%# Eval("Hold_Navn") %>
            </td>
        </tr>
        </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
        </asp:Repeater>
-----------------------------------
Default.aspx.cs
-----------------------------------
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Connection to DB
        string strConn1 = "";
        strConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
        strConn1 += Server.MapPath("./App_Data/db.mdb");
        OleDbConnection conn1 = new OleDbConnection(strConn1);

        //Cookin up a cmd at stoppin data in the Datasource
        OleDbCommand Cmd1 = new OleDbCommand("SELECT Hold.Hold_Navn, Stævner.ST_Navn, Stævner.ST_Dato_Start, Stævner.ST_Dato_Slut, Stævner.ST_Arrangoer, Stævner.ST_Indsvoem FROM ((Hold INNER JOIN Bridge ON Hold.Hold_Id = Bridge.Hold_Id) INNER JOIN Stævner ON Bridge.ST_Id = Stævner.ST_Id)", conn1);
        conn1.Open();
        OleDbDataReader rd = Cmd1.ExecuteReader(CommandBehavior.CloseConnection);
        Rep1.DataSource = rd;
        Rep1.DataBind();
    }
}
-----------------------------

Har prøvet en del forskelligt men tror ikke man kan med en repeater ... men hvordan så =?
Avatar billede kalp Novice
25. marts 2007 - 11:56 #1
ved ikke om et helt holder, men prøv.

SELECT Hold.Hold_Navn, Stævner.ST_Navn, Stævner.ST_Dato_Start, Stævner.ST_Dato_Slut, Stævner.ST_Arrangoer, Stævner.ST_Indsvoem  FROM ((Hold INNER JOIN Bridge ON Hold.Hold_Id = Bridge.Hold_Id) INNER JOIN Stævner ON Bridge.ST_Id = Stævner.ST_Id GROUP BY (Hold.Hold_Navn, Stævner.ST_Navn, Stævner.ST_Dato_Start, Stævner.ST_Dato_Slut, Stævner.ST_Arrangoer, Stævner.ST_Indsvoem)
Avatar billede filix Nybegynder
25. marts 2007 - 13:28 #2
nope siger fejl i inner jointen
Avatar billede filix Nybegynder
25. marts 2007 - 13:38 #3
Men det værste jeg ved ikke om man kan gøre det bare ved og ændre ens sql :S
Avatar billede dr_chaos Nybegynder
25. marts 2007 - 16:43 #4
Du kan desværre ikke gøre helt det du vil.
Hvis du vil vise alle hold vil den vise et stævne flere gange.
Du kan evt kigge på nested repeaters.
Se evt her:
http://www.mostlylucid.co.uk/articles/nestedrepeaters.htm
Avatar billede filix Nybegynder
26. marts 2007 - 09:34 #5
hmmm ja kan godt se det er noget i den stil, men damn synes det er et vildt eksempel... nu ved jeg godt jeg er træls hehe ...

Men hvis du har eller kan smede noget sammen, fordi han benytter sig af en masse unødvendigt ... så forstår det nok ikke helt:)
Avatar billede dr_chaos Nybegynder
26. marts 2007 - 20:26 #6
<asp:Repeater ID="Rep1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" >
        <HeaderTemplate><table></HeaderTemplate>
        <ItemTemplate>
<asp:label id="lblST_Id" runat="server" text='<%Eval("ST_Id")%>'/>
        <tr>
            <td>
            <%# Eval("ST_Navn") %>
            </td>
         
            <td>
            <%# Eval("ST_Dato_Start") %>
            </td>
         
            <td>
            <%# Eval("ST_Dato_Slut") %>
            </td>
         
            <td>
            <%# Eval("ST_Arrangoer") %>
            </td>
         
            <td>
            <%# Eval("ST_Indsvoem") %>
            </td>
         
            <td>
            <asp:Repeater ID="Rep2" runat="server" >
<ItemTemplate>
<table>
<tr>
<td>
            <%# Eval("Hold_Navn")
</tr>
</table>
</ItemTemplate>
/asp:Repeater>
            </td>
        </tr>
        </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
        </asp:Repeater>
Avatar billede dr_chaos Nybegynder
26. marts 2007 - 20:31 #7
Noget i denne stil:
private void  Repeater1_ItemDataBound( object  sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)

    {

      ListItemType lt = e.Item.ItemType;

      if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)

      {

        Label img = e.Item.FindControl( "CompanyNameImage" ) as Label;
Repeater r = e.Item.FindControl("Rep2") as Repeater;

//Connection to DB
        string strConn1 = "";
        strConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
        strConn1 += Server.MapPath("./App_Data/db.mdb");
        OleDbConnection conn1 = new OleDbConnection(strConn1);

        //Cookin up a cmd at stoppin data in the Datasource
        OleDbCommand Cmd1 = new OleDbCommand("SELECT Hold.Hold_Navn FROM Hold INNER JOIN Bridge ON Hold.Hold_Id = Bridge.Hold_Id WHERE Bridge.ST_Id =" +lblST_Id.Text+ "", conn1);
        conn1.Open();
        OleDbDataReader rd = Cmd1.ExecuteReader(CommandBehavior.CloseConnection);
        r.DataSource = rd;
        r.DataBind();
}
Avatar billede filix Nybegynder
27. marts 2007 - 09:03 #8
har prøvet og rode lidt rundt med det, og den label du gerne vil have i repeateren må ikke være der ...
Avatar billede dr_chaos Nybegynder
27. marts 2007 - 23:32 #9
hvilken en fejl får du ?
den kode jeg gav var skrevet i hånden så fejl kan forekomme.
Avatar billede filix Nybegynder
28. marts 2007 - 08:25 #10
Jeg for som fejl.

at "lblST_Id.Text" i sqlen ikke er at finde, af en eller anden grund må jeg ikke bruge den i inde i repeateren (altså jeg må ikke benytte labels inde i repeateren siger den, den kan ihvertfald ikke finde det som objekt) har siddet og leget lidt med og oprette et nyt label også prøve med den, men kan jeg ikke.
Avatar billede dr_chaos Nybegynder
30. marts 2007 - 04:35 #11
prøv med:
private void  Repeater1_ItemDataBound( object  sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)

    {

      ListItemType lt = e.Item.ItemType;

      if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)

      {

      Label lblST_Id = e.Item.FindControl( "lblST" ) as Label;
Repeater r = e.Item.FindControl("Rep2") as Repeater;

//Connection to DB
        string strConn1 = "";
        strConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
        strConn1 += Server.MapPath("./App_Data/db.mdb");
        OleDbConnection conn1 = new OleDbConnection(strConn1);

        //Cookin up a cmd at stoppin data in the Datasource
        OleDbCommand Cmd1 = new OleDbCommand("SELECT Hold.Hold_Navn FROM Hold INNER JOIN Bridge ON Hold.Hold_Id = Bridge.Hold_Id WHERE Bridge.ST_Id =" +lblST_Id.Text+ "", conn1);
        conn1.Open();
        OleDbDataReader rd = Cmd1.ExecuteReader(CommandBehavior.CloseConnection);
        r.DataSource = rd;
        r.DataBind();
}
Avatar billede filix Nybegynder
30. marts 2007 - 13:47 #12
nu siger den at protection lvl er forkert.

Så prøvede jeg lige og ændre den til public for at se om den ville igennem.
Det ville den men den udskriver ikke noget...

Hvis du har lyst og tid må du gerne tage et kig ar lagt koden op på nettet så du kan få dben med.

http://www.rasmusfjord.dk/blog.rar
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