Avatar billede simsen Mester
15. januar 2008 - 08:47 Der er 15 kommentarer og
1 løsning

Tutorial til web server control

Hejsa,

Jeg mangler en tutorial(c#), der kan vise mig, hvordan jeg laver et gridview i en web server control. Nogen der kan hjælpe mig med det?

mvh
simsen :-)
Avatar billede ladyhawke Novice
15. januar 2008 - 09:56 #1
er det ikke at oprette en instans af gridview og kalde GridView1.RenderControl()? eller det er ikke det du mener?
Avatar billede simsen Mester
15. januar 2008 - 10:53 #2
ladyhawke

Jeg tror det er det jeg mener.....Jeg har indtil nu lavet én servercontrol, der bandt data(sqldatabase) til en dropdown. Det jeg mangler er en tutorial, der viser, hvordan jeg binder data til et gridview istedet - så jeg stadig har et gridviews funktionalitet - såsom at slette en række - editere og tilføje en række.

Kender du til sådan en tutorial?
Avatar billede ladyhawke Novice
15. januar 2008 - 11:16 #3
der er vel ikke forskel på at gøre det i en server control frem for et andet sted, bortset fra at du "selv" skal tegne...

Her er en artikel som indeholder noget om det: http://www.aspnettutorials.com/tutorials/database/db-grid-aspnet2-csharp.aspx
Avatar billede ladyhawke Novice
16. januar 2008 - 13:17 #4
kan du bruge det?
Avatar billede simsen Mester
21. januar 2008 - 08:26 #5
ladyhawke

Hvad er det jeg selv skal tegne?

mvh
simsen :-)
Avatar billede ladyhawke Novice
21. januar 2008 - 09:24 #6
du skal selv "render" kontrollerne, altså sørge for de bliver tegnet, det kan være lidt abstrakt at arbejde med, men kan du bruge artiklen?
Avatar billede simsen Mester
23. januar 2008 - 16:10 #7
ladyhawke,

Desværre ikke nej, artiklen fortæller jo bare, hvordan jeg får et gridview til at arbejde sammen med en tabel/forespørgsel i en database....... Og det er jo ikke deri mit problem på nogen måder ligger......Det har jeg gjort i 2 år nu.

Mit problem ligger i, som skrevet, at jeg vil lave en web server control, hvor jeg så har et gridview i denne (det du skriver som "selv" skal tegne) og det er det, jeg mangler en tutorial i......Jeg kan finde en, hvor den gør det til en dropdown control og det fungerer ganske glimrende.....men forsøger jeg at oversætte dette til en gridview får jeg fejl, så derfor har jeg brug for en howto/tutorial

mvh
simsen :-)
Avatar billede ladyhawke Novice
24. januar 2008 - 08:57 #8
Joh men så spyt ud med fejlen i stedet, det er meget nemmere...
Avatar billede simsen Mester
24. januar 2008 - 14:19 #9
Min kode ser ud som følgende:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

namespace DataDropDown
{
    [DefaultProperty("DataTable")]
    [ToolboxData("<{0}:DataGridView runat=server></{0}:DataGridView>")]

    public class DataGridView : System.Web.UI.WebControls.GridView
    {

        private string mstrConnectString;
        private string mstrDataTable;


        [Bindable(true)]
        [Category("Data")]
        [DefaultValue("")]
        [Localizable(true)]
        public string DataTable
        {
            get { return mstrDataTable; }
            set { mstrDataTable = value; }
        }

        [Bindable(true),
        Category("Data"),
        DefaultValue("")]
        public string ConnectString
        {
            get { return mstrConnectString; }
            set { mstrConnectString = value; }
        }

        protected override void Render(HtmlTextWriter output)
        {
            base.Render(output);
        }

        //Override the DataBind Event
        public override void DataBind()
        {
            string strSQL;

            try
            {
                // Build SQL String
                strSQL = String.Format(
                  "SELECT {0}, {1} FROM {2}",
                  base.DataTextField, base.DataValueField,
                  mstrDataTable);

                // Fill in DataSource
                base.DataSource =
                  this.GetDataSet(strSQL, mstrConnectString);

                // Bind the Data
                base.DataBind();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //The GetDataSet Method
        private DataSet GetDataSet(string SQL, string ConnectString)
        {
            DataSet ds;
            SqlDataAdapter da;

            try
            {
                ds = new DataSet();
                da = new SqlDataAdapter(SQL, ConnectString);

                da.Fill(ds);

                return ds;
            }
            catch (Exception ex)
            {
                throw ex;

            }
        }
    }
}


Min fejl siger:

Error    1    'DataDropDown.DataGridView.DataBind()': cannot override inherited member 'System.Web.UI.WebControls.GridView.DataBind()' because it is sealed    C:\Projekter\Test\DataDropDown\DataDropDown\DataDropDown\DataGridView.cs    48    30    DataDropDown

Altså den fejler ved følgende linie(metode):
public override void DataBind()
Avatar billede simsen Mester
24. januar 2008 - 14:23 #10
En anden ting, jeg ikke helt forstår (men ved da det virker ved dropdown'en) er følgende linie:
"SELECT {0}, {1} FROM {2}"

Normalt når jeg laver en select, gør jeg det på følgende måde SELECT tabelID, navn FROM tabelnavn

Jeg kan gætte mig til at {2} betyder at den henter den property jeg sætter på som er tabelnavn - men hvor får den to-tallet fra? og igen - hvor får den de andre to tal fra?
Avatar billede ladyhawke Novice
24. januar 2008 - 14:30 #11
String.Format("SELECT {0}, {1} FROM {2}",
                  base.DataTextField, base.DataValueField,
                  mstrDataTable);
Det er en formatteret streng med parametre, så
{0} erstattes med base.DataTextField
{1} erstattes med base.DataValueField
{2} erstattes med mstrDataTable

Det er en helt normal konstruktion, der intet har med datagrids eller lign. at gøre
Avatar billede ladyhawke Novice
24. januar 2008 - 14:33 #12
din fejl består (jf beskrivelsen) i at du forsøger at ændre/overskrive en indbygget funktion (i System.Web.UI.WebControls.GridView.DataBind()) med din egen udgave og da denne metode er sealed, så kan det ikke lade sig gøre...
Avatar billede ladyhawke Novice
24. januar 2008 - 14:36 #13
protected override void Render(HtmlTextWriter output)
        {
            base.Render(output);
        }
Det er denne metode du skal bruge til at "tegne" din custom control, altså alt hvad der skal vises i brugergrænsefladen skal "render's" her

Du behøver ikke nedarve fra gridview, du kan tegne det i stedet (altså tilføje en variabel af typen gridview og i render funktionen noget i retning af GridViewVariabel.Render().)
Avatar billede simsen Mester
24. januar 2008 - 16:11 #14
Hvor får den base.DataTextField og base.DataValueField fra?....for jeg kan ikke se, det er noget, jeg har skrevet ind i koden og normalt når jeg laver en select kommando - så er det jo værdi feltet jeg skriver ind - altså eksempelvis byID feltet fra databasen det er jo ikke en insert statement?

Jeg kan godt se den er selead, altså at de har lavet det sådan, at man ikke kan tilgå den, men forstår slet og ret ikke hvorfor jeg ikke kan fylde et datagrid op fra start af i en custom control? Så synes jeg jo sådan set at custom controls mister sin værdi, hvis man ikke kan den slags...... og hvorfor kan det så lade sig gøre i en dropdown boks?

Forstår jeg dig korrekt mht. protected override void Render....at ville jeg f.eks. putte gridviewet ind i en datatable og vise den på en bestemt måde, er det her, jeg skal gøre dette? Eller er det selve gridview'ens udseende jeg skal render her?

Jeg har nedarvet, fordi jeg mener, at have læst mig frem til, at jeg så er fri for at lave de forskellige funtioner, som gridviewet er i stand til. F.eks. har jeg ikke planer om, at gøre noget ved paging. Når jeg nu ikke har det, men synes det er ok, at de andre, selv kan beslutte sig for om de vil have det på eller ej, så er det vel nedarving jeg skal bruge?

Og så lige et ps: Tak fordi du gider at hjælpe mig - jeg sætter meget stor pris på det.
Avatar billede simsen Mester
31. januar 2008 - 10:42 #15
lukker
Avatar billede ladyhawke Novice
31. januar 2008 - 11:31 #16
men åbenbart ikke hjælp nok til at dele point ud...
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