Avatar billede travelnow Nybegynder
07. juli 2006 - 12:55 Der er 9 kommentarer og
1 løsning

Dataview og klasse

Hvordan binder jeg et dataview ell. en datagrid til en klasse.

eks. klasse

public kundeClass
{
  public List<KundeDetail> Kunder;
  public kundeClass()
  {
      this.kunder= new List<KundeDetail>();
      ....
      ....
    }
}

Klassen KundeDetail indeholder properties så som kundeNr, navn, adresse m.m.
Spørgsmålet er så, hvordan binder jeg den sammen med et datagrid/dataview.

altså noget i stil med....

public void test()
{
  kundeClass MineKunder = new kundeClass();
  // fyld data i
  ....
  dataview1.datasource = MineKunder.kunder;

og her skal der så stå det som binder felterne til view'et, men hvordan gør jeg det

  dataview1.DataBind();
}
Avatar billede snepnet Nybegynder
07. juli 2006 - 13:00 #1
Forstår ikke helt din model...Vil du ikke hellere bare databinde til dine egne klasser?
F.eks. til en
public class KundeListe : List<Kunde>
{
}
Mvh
Avatar billede travelnow Nybegynder
07. juli 2006 - 13:56 #2
Jo jeg vil databinde til min egen klasse, det jeg vil binde det op på er listen af kundedetail (public List<KundeDetail> Kunder) som ligger i klassen 'kundeClass' og det er det jeg viser med denne linie (dataview1.datasource = MineKunder.kunder;).

Hvis du stadig ikke forstår det helt, så bare gi' mig et eksempel på hvordan man kan binde en klasse op på et dataview.
Avatar billede snepnet Nybegynder
07. juli 2006 - 14:21 #3
Et dataview er normalt et view af en datatable, og ikke nogen grafisk kontrol.... Det var nok det der forvirrede mig lidt i dit eksempel.

Hvis du vil vise dine data i et GridView kan du gøre sådan her:

// i aspx'en
<asp:GridView id="grid" runat="server" />

// i page_load
if(!IsPostBack)
{
  grid.DataSource = MineKunder.Kunder;
  grid.DataBind();
}

Men du kan også bruge en ObjectDataSource... Og få den til at pege på den klasse (og de metoder) der skal benyttes i forbindelse med databehandlingen.

Mvh
Avatar billede travelnow Nybegynder
07. juli 2006 - 14:34 #4
Det med
  grid.DataSource = MineKunder.Kunder;
  grid.DataBind();
har jeg prøvet, men det virker ikke, den ved sikkert ikke hvad den skal vise, det er derfor jeg spørger om man ikke skal fortælle grid/viewet hvilke felter den skal vise, har prøvet noget med 'GridView1.DataMember  = "Kundenr", men uden held.

Hvad mener du med ObejctDatasource ......., har du ikke et eksempel eller link til et eksempel.

Husk at et godt eksempel siger mere end 1000 ord!!!!
Avatar billede snepnet Nybegynder
07. juli 2006 - 14:47 #5
Et GridView viser automatisk alle public properties på objekterne der databindes imod, så med mindre du har bedt det om at lade være skulle du se noget.
AutoGenerateColumns="false" på et GridView vil medføre at du tvinges til selv at angive de kolonner der skal vises, hvilket kan gøres rimelig enkelt - f.eks.:

<asp:GridView ID="GridView1" runat="server" >
    <Columns>         
        <asp:BoundField DataField="KundeNavn" HeaderText="Kundenavn" />
    </Columns>
</asp:GridView>

Såh... hvis du ikke har andet end et GridView på siden - præcis som jeg har skrevet det - og for øvrigt sørger for at der er data i din kundeliste, så skal du få noget at se:

Men... Hvis du ikke har nogle public properties på din Kunde klasse - kan det være forklaringen på at du ingenting ser.

Kan du ikke poste Kunde klassen her?

Vi kan altid tage den med en ObjectDataSource senere.... Lad os lige få et minimums eksempel i luften først.

Der er for øvrigt rigtig mange links til den slags - her er et godt entrypoint:
http://www.asp.net/learn/default.aspx?tabid=63
Der er masser omkring datahåndtering.

Mvh
Avatar billede travelnow Nybegynder
10. juli 2006 - 08:31 #6
Nu har jeg lavet et helt simpel eksempel, men det virker ikke.

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.Collections.Generic;

public partial class test2 : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
    {
      KundeClass mKunde = new KundeClass();
      KundeDetail k = new KundeDetail();
      k.id = "100";
      k.navn = "kaj";
      k.nr = "234";
      k.adresse = "Testvej";
      mKunde.Kunder.Add(k);

      k = new KundeDetail();
      k.id = "100";
      k.navn = "kaj";
      k.nr = "234";
      k.adresse = "Testvej";
      mKunde.Kunder.Add(k);

      k = new KundeDetail();
      k.id = "100";
      k.navn = "kaj";
      k.nr = "234";
      k.adresse = "Testvej";
      mKunde.Kunder.Add(k);

      GridView1.DataSource = mKunde.Kunder;
      GridView1.DataBind();
    }
}
public class KundeClass
{
  public List<KundeDetail> Kunder;

  public KundeClass()
  {
    this.Kunder = new List<KundeDetail>();
  }
}

public class KundeDetail
{
  public string id;
  public string nr;
  public string navn;
  public string adresse;
  public KundeDetail()
  {
  }
}

I flg. det du skriver burde ovenstående da virke, ikk?????
Avatar billede travelnow Nybegynder
10. juli 2006 - 09:01 #7
Så nu virker det, der var jo ingen public properties i min testklasse, kun public string's, så da jeg ændrede de public variabler til properties virkede det.

public class KundeDetail
{
  private string _id;
  private string _nr;
  private string _navn;
  private string _adresse;

  public string id
  {
    get { return _id; }
    set { _id = value; }
  }
  public string nr
  {
    get { return _nr; }
    set { _nr = value; }
  }
  public string navn
  {
    get { return _navn; }
    set { _navn = value; }
  }
  public string adresse
  {
    get { return _adresse; }
    set { _adresse = value; }
  }

  public KundeDetail()
  {
  }
}

Så kom med et svar og få dine point.
Avatar billede travelnow Nybegynder
10. juli 2006 - 09:08 #8
Forresten, nu er det jo sådan at den klasse jeg skal bruge ikke har public properties på alle de ting der skal vises i grid'et, kan jeg gøre noget der, udover at tilføje properties til dem jeg skal bruge.
Klassen ligger i et andet projekt, hvor jeg så bare refererer til .dll'en, så det er ikke helt simpel bare at ændre klassen.
Avatar billede travelnow Nybegynder
02. oktober 2006 - 10:54 #9
snepnet>>
det er da hvis lukketid her, og da dit svar jo er rigtig, kan du så ikke lige sende et svar.
Avatar billede snepnet Nybegynder
02. oktober 2006 - 10:58 #10
Det burde godt kunne lade sig gøre - men det er noget mere bikset.
Hvis det er relevant tilstand for eksternt brug på klassen - hvorfor i alverden er det så ikke public?
Mvh
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