Avatar billede montymus Nybegynder
26. oktober 2005 - 14:11 Der er 28 kommentarer og
1 løsning

Få Kalenderen i vs C# til at dykke ned i db og hente data

Hvordan får jeg gjort at når man klikker på en dato i min kalender at den ser databasen igennem for den givne dato og henter data frem og viser det???
Avatar billede nielle Nybegynder
26. oktober 2005 - 14:47 #1
Du starter med at sætte en DateSelected-event på din MonthCalender (eller er det en egenfremstillet kalender?). I denne kan du så spørge på hvilken dato der er valgt med funktionen Start (eller End) på den DateRangeEventArgs du får når du klikker på en dato:

private void monthCalendar1_DateSelected(object sender, System.Windows.Forms.DateRangeEventArgs e)
{
    MessageBox.Show(e.Start.ToString());
}

Derefter er det almindelig kodning mht. hvordan du ville trække noget dato-relateret ud af din database.
Avatar billede montymus Nybegynder
26. oktober 2005 - 14:51 #2
Det er den kalender der er i vs..

Jeg er totalt noob har jeg lige glemt at sige :)

Jeg dobbeltklikker på kalenderen i vs og så generer den denne kode:

private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
        {
           
           
           
       
        }

Skal den så bruges eller??
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:01 #3
Ja, det er den forkerte eventhandler du får fat i der. :^)

Du skal markere kalenderen i din form. Derefter skal du ud i højre side; Under Properties klikker du på det lille lyn-ikon (betyder events). Øverst i denne finder du så DateSelected. Denne klikker du på. Dette giver dig den funktion som jeg viste:

monthCalendar1_DateSelected

I denne sæter di den lille kodestump ind som jeg viste.

Hvis der nu kommer en messageboks frem når du klikker på en dato så er du godt på vej. :^)
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:07 #4
;) prøver
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:10 #5
hmm  det der kommer frem når jeg trykker på lynet er:

+Action
DayRender
SelectionChanged
VisibleMonthChar

+Data
DataBinding

+Misc
Disposed
Init
Load
Prerender
Unload
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:12 #6
Klik på +-tegnet ud for Action.
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:13 #7
jep og derinde er der kunde tre
DayRender
SelectionChanged
VisibleMonthChar
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:16 #8
Det ligner ikke den jeg sidder med... Hvad har du VS 2003 eller 2005. En tidligere version?

... og hvad hedder kalender-kontrollen? Klik under Design og fortæl hvad der står ud for Name.
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:19 #9
Vs 2003  version 7.1.3088 og .NET 1.1

Den har ikke noget Name men et ID som er Calendar1
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:24 #10
Ok, du er mao. i gang med ASP.NET - jeg gik ud fra at det vare en Windwos applikarion ;^)
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:25 #11
sry der hehe... jeg fandt din under web-service og jeg er igang med en webapplikation ;)
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:28 #12
kan du stadig hjælpe??
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:29 #13
Hvis d sætter en label ind på din side - bare for at illustrere - så kan du lave det samme med denne kodestump:

private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
{
    this.Label1.Text = this.Calendar1.SelectedDate.ToString();
}
Avatar billede montymus Nybegynder
26. oktober 2005 - 15:33 #14
Så langt er jeg ;)

Det jeg har brug for hjælp til er at når man klikker på en dato så skal den connecte til min MSSQL database og dykke ned i mit eventTB og hente de events frem der har deadline på den givne dato..

Det ved jeg ikke liige hvordan jeg skal kode..
Avatar billede nielle Nybegynder
26. oktober 2005 - 15:38 #15
Men så har dit problem jo sådan set ikke noget at gøre med at det er en kalender. Så er det et rent databaseproblem. :^)

Det kan jeg godt hjælpe dig med, men desværre ikke lige nu. Men jeg kan fortælle dig at du f.eks. kan Google lidt på ADO.NET (det hedder teknologien). Desuden er det:

using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;

- du skal have fat på for at arbejde med en MS SQL database.
Avatar billede montymus Nybegynder
26. oktober 2005 - 16:22 #16
ok.. jeg prøver mig frem hehe... stresse stresse stressse..:)
Avatar billede nielle Nybegynder
26. oktober 2005 - 18:35 #17
En af metoderne til at trække data ud af din tabel er vha. en SqlDataReader:

string ConnStr = "Data Source=<host her>;database=<databae her>;user=<user her>;pwd=<password her>";

SqlConnection Conn = new SqlConnection(ConnStr);
Conn.Open();

string SQL = "SELECT * FROM dinTabel";
SqlCommand Cmd = new SqlCommand(SQL, Conn);

SqlDataReader Reader = Cmd.ExecuteReader();
while (Reader.Read())
{
    // Her trækker du data ud af readeren og gør et eller andet med det.
}
Reader.Close();

Conn.Close();
Avatar billede montymus Nybegynder
26. oktober 2005 - 22:48 #18
Er jeg så ovre i at jeg skal have noget ala dette:

private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
        {
            //string ConnStr = "Data Source=MONTYMUZ;database=5SEMTEST;user=sa;pwd=03051996";
            SqlConnection ConnStr = new SqlConnection("Data Source=MONTYMUZ;"+
                "Initial Catalog=5SEMTEST_DB;"+
                "User ID=sa;"+
                "Password=03051996;");

            //SqlConnection Conn = new SqlConnection(ConnStr);
            ConnStr.Open();

            string SQL = "SELECT * FROM Event";
            SqlCommand Cmd = new SqlCommand(SQL, ConnStr);

            SqlDataReader Reader = Cmd.ExecuteReader();
            while (Reader.Read())
            {
                // Her trækker du data ud af readeren og gør et eller andet med det.
                //Create a SqlAdapter object
                SqlDataAdapter adp = new SqlDataAdapter(SQL, ConnStr);
                //Create a dataset object
                DataSet ds = new DataSet();
                //Create a usertable in the dataset and fill it with the data
                //collected from selectcommand of the SqlDataAdapter
                adp.Fill(ds, "Event");

                DataGrid1.DataSource = ds.Tables["Event"].DefaultView;
                DataGrid1.DataBind();

                //Itherate through the rows collection of the employee table
                foreach (DataRow dr in ds.Tables["Event"].Rows)
                {
                    //DataGrid1 += string.Format("{0} {1} {2} {3}<br>", dr["FirstName"], dr["LastName"], dr["Email"], dr["Mobil"]);
                }
            }
            Reader.Close();

            ConnStr.Close();
               
        }

Der er så det problem at jeg får en fejl når jeg klikker på en dato:

Serverfejl i programmet '/5sem/SKiste'.
--------------------------------------------------------------------------------

Denne Connection har allerede en tilknyttet åben DataReader, der skal lukkes først.
Beskrivelse: Der opstod en ikke-afviklet undtagelse under udførelse af den aktuelle webanmodning. Se staksporingen for at få yderligere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.InvalidOperationException: Denne Connection har allerede en tilknyttet åben DataReader, der skal lukkes først.

Kildefejl:


Linje 118:                //Create a usertable in the dataset and fill it with the data
Linje 119:                //collected from selectcommand of the SqlDataAdapter
Linje 120:                adp.Fill(ds, "Event");
Linje 121:
Linje 122:                DataGrid1.DataSource = ds.Tables["Event"].DefaultView;


Kildefil: c:\inetpub\wwwroot\5sem\skiste\calendar.aspx.cs    Linje: 120

Staksporing:


[InvalidOperationException: Denne Connection har allerede en tilknyttet åben DataReader, der skal lukkes først.]
  System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean executing)
  System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)
  System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
  System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
  System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
  System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
  System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
  SKiste.WebForm1.Calendar1_SelectionChanged(Object sender, EventArgs e) in c:\inetpub\wwwroot\5sem\skiste\calendar.aspx.cs:120
  System.Web.UI.WebControls.Calendar.OnSelectionChanged()
  System.Web.UI.WebControls.Calendar.SelectRange(DateTime dateFrom, DateTime dateTo)
  System.Web.UI.WebControls.Calendar.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  System.Web.UI.Page.ProcessRequestMain()




--------------------------------------------------------------------------------
Versionsoplysninger: Microsoft .NET Framework version:1.1.4322.2032; ASP.NET version:1.1.4322.2032
Avatar billede nielle Nybegynder
26. oktober 2005 - 22:51 #19
Det giver heller ikke mening at du skriver:

ConnStr.Open();
Avatar billede montymus Nybegynder
26. oktober 2005 - 22:56 #20
ok?? hehe igen jeg er kæmpe noob til det her... Sidder og læser samtidig... har kun haft ca 4 timer om ADO.NET på skolen..
Avatar billede montymus Nybegynder
26. oktober 2005 - 22:57 #21
hvis jeg fjerner ConnStr.Open() så laver den fejl og siger jeg mangler at åbne min connectionstring
Avatar billede nielle Nybegynder
27. oktober 2005 - 08:47 #22
Ok, mig der læste lidt forkert.

Grunden til at jeg, i 26/10-2005 18:35:51, kalder det for CoonStr er at det er Conection-String. Conn er selve Connectionen. Jeg belv derfor lidt forvirret af at du havde rettet Conn til at hedde ConnStr.
Avatar billede nielle Nybegynder
27. oktober 2005 - 11:49 #23
Jeg regnede med at du ville lave noget med dine data, så derfor while-løkken - men hvis du bare vil vise dem i et DataGrid, vil du nok have bedre held med dette:

private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
{
    // string ConnStr = "Data Source=MONTYMUZ;database=5SEMTEST;user=sa;pwd=03051996";
    string ConnStr = "Data Source=MONTYMUZ;Initial Catalog=5SEMTEST_DB;User ID=sa;Password=03051996;";
    SqlConnection Conn = new SqlConnection();

    // SqlConnection Conn = new SqlConnection(ConnStr);
    Conn.Open();

    string SQL = "SELECT * FROM Event";
    SqlCommand Cmd = new SqlCommand(SQL, Conn);

    SqlDataReader Reader = Cmd.ExecuteReader();

    // Create a SqlAdapter object
    SqlDataAdapter adp = new SqlDataAdapter(SQL, Conn);

    // Create a dataset object
    DataSet ds = new DataSet();

    // Create a usertable in the dataset and fill it with the data
    // collected from selectcommand of the SqlDataAdapter
    adp.Fill(ds, "Event");

    DataGrid1.DataSource = ds.Tables["Event"].DefaultView;
    DataGrid1.DataBind();
           
    // Itherate through the rows collection of the employee table
    foreach (DataRow dr in ds.Tables["Event"].Rows)
    {
        // DataGrid1 += string.Format("{0} {1} {2} {3}<br>", dr["FirstName"], dr["LastName"], dr["Email"], dr["Mobil"]);
    }

    Reader.Close();

    Conn.Close();
}
Avatar billede burningice Nybegynder
27. oktober 2005 - 18:53 #24
mon ikke SQL'en skal være

string SQL = "SELECT * FROM Event WHERE eventDate = '"+ this.Calendar1.SelectedDate.ToString() +"'";

og så bare bruge en reader til at skrive alle events ud for en given dato
Avatar billede nielle Nybegynder
27. oktober 2005 - 19:04 #25
Det afhænger jo af hvad dato-feltet i tabellen hedder, om det overhovedet er et dato-felt (eller måske et tekstr-felt) og om databasen vil have engelsk eller dansk dato notation. Men ja, noget i den stil, om end jeg personligt ville foretrække at bruge parametre.

Iøvrigt vil databasen nu nok have #-tegn rundt om dataværdien istedet for '-tegn.
Avatar billede montymus Nybegynder
28. oktober 2005 - 10:35 #26
DEn builder fint uden fejl men den viser intet i mit datagrid uanset om jeg bruger nielles eller burningices..
Avatar billede montymus Nybegynder
30. oktober 2005 - 13:43 #27
hmm fatter det stadigvæk ikke.. Jeg har denne kode:

private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
        {
            // string ConnStr = "Data Source=MONTYMUZ;database=5SEMTEST;user=sa;pwd=03051996";
            string ConnStr = "Data Source=MONTYMUZ;Initial Catalog=5SEMTEST_DB;User ID=sa;Password=03051996;";
            SqlConnection Conn = new SqlConnection();

            // SqlConnection Conn = new SqlConnection(ConnStr);
            Conn.Open();

            string SQL = "SELECT * FROM Event";
            //WHERE Date = '"+ this.Calendar1.SelectedDate.ToString() +"'";


            SqlCommand Cmd = new SqlCommand(SQL, Conn);

            SqlDataReader Reader = Cmd.ExecuteReader();

            // Create a SqlAdapter object
            SqlDataAdapter adp = new SqlDataAdapter(SQL, Conn);

            // Create a dataset object
            DataSet ds = new DataSet();

            // Create a usertable in the dataset and fill it with the data
            // collected from selectcommand of the SqlDataAdapter
            adp.Fill(ds, "Event");

            DataGrid1.DataSource = ds.Tables["Event"].DefaultView;
            DataGrid1.DataBind();
           
            // Itherate through the rows collection of the Event table
            foreach (DataRow dr in ds.Tables["Event"].Rows)
            {
                //DataGrid1 += Convert.ToString("{0} {1} {2} <br>", dr["Headline"], dr["Story"], dr["Date"]);
            }

            Reader.Close();

            Conn.Close();

           
        }

Til at starte med vil jeg baer gerne have at den viser indholdet af db fra en given dato og bagefter vil jeg så gerne have at når man klikker på en event så åbner den en ny side hvor jeg kan redigere den event
Avatar billede montymus Nybegynder
30. oktober 2005 - 13:44 #28
glemte helt.. Er der nogen der kan hjælpe?
Avatar billede montymus Nybegynder
30. oktober 2005 - 16:15 #29
har omformuleret mit sp i en ny tråd..
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