Avatar billede sbaht Nybegynder
21. marts 2006 - 12:22 Der er 28 kommentarer og
1 løsning

Søgning i et dato range.

Jeg skal lave en søgefunktion hvor søgekreteriet er et dato range, der skal indtastes en start og slutdato, har lidt problemer med at komme igang. Resultatet skal hentes fra en sqldatabase.
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 12:26 #1
et eksempel:
År
<asp:DropDownList ID="drpansaettelsesAar" runat="server" AutoPostBack=true OnSelectedIndexChanged="drpansaettelsesdato_SelectedIndexChanged" ></asp:DropDownList>
Måned
<asp:DropDownList ID="drpansaettelsesMaaned" AutoPostBack=true OnSelectedIndexChanged="drpansaettelsesdato_SelectedIndexChanged" runat="server"></asp:DropDownList>
Dag
<asp:DropDownList ID="drpansaettelsesDag" runat="server"></asp:DropDownList>



<br /><br />
Vælg en evt fratrædelses dato:<br />
År
<asp:DropDownList ID="drpfratraedelsesAar" runat="server" AutoPostBack=true OnSelectedIndexChanged="drpfratraedelsesdato_SelectedIndexChanged" ></asp:DropDownList>
Måned
<asp:DropDownList ID="drpfratraedelsesMaaned" AutoPostBack=true OnSelectedIndexChanged="drpfratraedelsesdato_SelectedIndexChanged" runat="server"></asp:DropDownList>
Dag
<asp:DropDownList ID="drpfratraedelsesDag" runat="server"></asp:DropDownList>
<br /><br />
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 12:27 #2
i codebehind skal du bruge:
private void GenererDatoDrpLister()
    {
        //ansættelsesdato dropdownlister
        drpansaettelsesAar.Items.Add(new ListItem(""));
        for (int i = 0; i >= -50; i--)
        {
            drpansaettelsesAar.Items.Add(new ListItem("" + (DateTime.Now.Year + i) + ""));

        }
        drpansaettelsesMaaned.Items.Add(new ListItem(""));
        for (int j = 1; j <= 12; j++)
        {
            if (j.ToString().Length == 1)
                drpansaettelsesMaaned.Items.Add(new ListItem("0" + j));
            else
                drpansaettelsesMaaned.Items.Add(new ListItem(j.ToString()));
        }
        drpansaettelsesDag.Items.Add(new ListItem(""));
        for (int k = 1; k <= 30; k++)
        {
            if (k.ToString().Length == 1)
                drpansaettelsesDag.Items.Add(new ListItem("0" + k));
            else
                drpansaettelsesDag.Items.Add(new ListItem(k.ToString()));
        }
        //fratrædelsesdato dropdownlister
        drpfratraedelsesAar.Items.Add(new ListItem(""));
        for (int i = 5; i >= 0; i--)
        {
            drpfratraedelsesAar.Items.Add(new ListItem("" + (DateTime.Now.Year + i) + ""));

        }
        drpfratraedelsesMaaned.Items.Add(new ListItem(""));
        for (int j = 1; j <= 12; j++)
        {
            if (j.ToString().Length == 1)
                drpfratraedelsesMaaned.Items.Add(new ListItem("0" + j));
            else
                drpfratraedelsesMaaned.Items.Add(new ListItem(j.ToString()));
        }
        drpfratraedelsesDag.Items.Add(new ListItem(""));
        for (int k = 1; k <= 30; k++)
        {
            if (k.ToString().Length == 1)
                drpfratraedelsesDag.Items.Add(new ListItem("0" + k));
            else
                drpfratraedelsesDag.Items.Add(new ListItem(k.ToString()));
        }
    }



protected void drpansaettelsesdato_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (drpansaettelsesAar.SelectedValue.Length > 0 && drpansaettelsesMaaned.SelectedValue.Length > 0)
        {
            drpansaettelsesDag.Items.Clear();
            drpansaettelsesDag.Items.Add(new ListItem(""));
            for (int l = 1; l <= DateTime.DaysInMonth(int.Parse(drpansaettelsesAar.SelectedValue), int.Parse(drpansaettelsesMaaned.SelectedValue)); l++)
            {
                if (l.ToString().Length == 1)
                    drpansaettelsesDag.Items.Add(new ListItem("0" + l));
                else
                    drpansaettelsesDag.Items.Add(new ListItem(l.ToString()));
            }
        }
    }
    protected void drpfratraedelsesdato_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (drpfratraedelsesAar.SelectedValue.Length > 0 && drpfratraedelsesMaaned.SelectedValue.Length > 0)
        {
            drpfratraedelsesDag.Items.Clear();
            drpfratraedelsesDag.Items.Add(new ListItem(""));
            for (int l = 1; l <= DateTime.DaysInMonth(int.Parse(drpfratraedelsesAar.SelectedValue), int.Parse(drpansaettelsesMaaned.SelectedValue)); l++)
            {
                if (l.ToString().Length == 1)
                    drpfratraedelsesDag.Items.Add(new ListItem("0" + l));
                else
                    drpfratraedelsesDag.Items.Add(new ListItem(l.ToString()));
            }
        }
    }
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 12:27 #3
I page load ligger du :
    if (!Page.IsPostBack)
        {
            GenererDatoDrpLister();
        }
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 12:29 #4
DateTime Start =  DateTime.Parse("" + drpansaettelsesDag.SelectedValue + "-" + drpansaettelsesMaaned.SelectedValue + "-" + drpansaettelsesAar.SelectedValue);
DateTime Slut
DateTime.Parse("" + drpfratraedelsesDag.SelectedValue + "-" + drpfratraedelsesMaaned.SelectedValue + "-" + drpfratraedelsesAar.SelectedValue)


string sql = "SELECT * FROM Tabel WHERE Dato BETWEEN "+Start+"AND"+Slut+"";
Avatar billede sbaht Nybegynder
21. marts 2006 - 12:36 #5
For lige at at være sikker på at det forstås korrekt, det jeg skal lave er at man i to textboxes skal tastes henholdsvis start og slutdato. Resultatet af søgning skal hentes ud af en sqldb.
Avatar billede sbaht Nybegynder
21. marts 2006 - 12:38 #6
Ok du kom mig forkøbet mht. til sql statement.. Kigger lige nærmere på det.
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:03 #7
hvis det er med textbokse så er det

DateTime Start =  DateTime.Parse(TextBox1.Text):

DateTime Slut =  DateTime.Parse(TextBox2.Text):
Avatar billede sbaht Nybegynder
21. marts 2006 - 13:13 #8
Skulle nedenstående ikke virke? jeg får en compileringsfejl der siger:
'System.DateTime' does not contain a definition for 'Text'

private void Button1_Click(object sender, System.EventArgs e)
        {
            if (!(Page.IsValid))
            {
                return;
            }
            DateTime Start = DateTime.Parse(Start.Text);
            DateTime Slut = DateTime.Parse(Slut.Text);

            string strConnection;
                       
            string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+"";
           
            strConnection = "user id=Webuser;password=xxxxx;";
            strConnection += "initial catalog=log;server=sqlNY;";
            strConnection += "Connect Timeout=30";

            SqlConnection conn = new SqlConnection( strConnection );
            SqlCommand cmd = new SqlCommand( Sql, conn );           

            DataSet ds = new DataSet();
            SqlDataAdapter adpt = new SqlDataAdapter( cmd );
            cmd.Connection.Open();

            try
            {
                adpt.Fill( ds );
            }
            finally
            {
                cmd.Connection.Close();
            }

            DataGrid1.DataSource = ds;
            DataGrid1.DataBind();
        }
    }
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:20 #9
Start.Text og Slut.Text skal komme fra dine textbokse.
kald dem evt
txtStart og txtSlut
Avatar billede sbaht Nybegynder
21. marts 2006 - 13:28 #10
Det dog lidt, men når jeg forsøger at søge på en dato kommer følgende fejl:

Line 1: Incorrect syntax near '00'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '00'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:


[SqlException: Line 1: Incorrect syntax near '00'.]
  System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) +742
  System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +45
  System.Data.SqlClient.SqlCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +5
  System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304
  System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77
  System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38
  Rensningslog.WebForm3.Button1_Click(Object sender, EventArgs e) in \\nzdev\rensningslog\soeg_dato.aspx.cs:105
  System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +58
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
  System.Web.UI.Page.ProcessRequestMain() +1292
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:29 #11
prøv lige med
string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start.ToString()+ "AND" +.ToString()
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:30 #12
string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start.ToString()+ "AND" +Slut.ToString()+"";
Avatar billede sbaht Nybegynder
21. marts 2006 - 13:35 #13
Det gør ingen forskel.. Det er samme fejl der kommer.
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:39 #14
hvordan indskriver du datoen ?
Avatar billede sbaht Nybegynder
21. marts 2006 - 13:40 #15
20-03-2006
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 13:48 #16
private void Button1_Click(object sender, System.EventArgs e)
        {
            if (!(Page.IsValid))
            {
                return;
            }
            DateTime Start;
string[] tmpStart = txtStart.Split('-');
Start.Day = int.Parse(tmpStart[0] );
Start.Month= int.Parse(tmpStart[1] );
Start.Year= int.Parse(tmpStart[2] );
            DateTime Slut;
string[] tmpSlut = txtSlut.Split('-');
Slut.Day = int.Parse(tmpSlut[0] );
Slut.Month= int.Parse(tmpSlut[1] );
Slut.Year= int.Parse(tmpSlut[2] );
            string strConnection;
                     
            string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+"";
         
            strConnection = "user id=Webuser;password=xxxxx;";
            strConnection += "initial catalog=log;server=sqlNY;";
            strConnection += "Connect Timeout=30";

            SqlConnection conn = new SqlConnection( strConnection );
            SqlCommand cmd = new SqlCommand( Sql, conn );         

            DataSet ds = new DataSet();
            SqlDataAdapter adpt = new SqlDataAdapter( cmd );
            cmd.Connection.Open();

            try
            {
                adpt.Fill( ds );
            }
            finally
            {
                cmd.Connection.Close();
            }

            DataGrid1.DataSource = ds;
            DataGrid1.DataBind();
        }
    }
Avatar billede sbaht Nybegynder
21. marts 2006 - 13:56 #17
Så får nedenstående fejl :-(

\Soeg_Dato.aspx.cs(91): 'System.Web.UI.WebControls.TextBox' does not contain a definition for 'Split'
\Soeg_Dato.aspx.cs(92): Property or indexer 'System.DateTime.Day' cannot be assigned to -- it is read only
\Soeg_Dato.aspx.cs(93): Property or indexer 'System.DateTime.Month' cannot be assigned to -- it is read only
\Soeg_Dato.aspx.cs(94): Property or indexer 'System.DateTime.Year' cannot be assigned to -- it is read only
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 14:13 #18
Sorry erstat
string[] tmpStart = txtStart.Split('-');
med

string[] tmpStart = txtStart.Text.Split('-');
Avatar billede sbaht Nybegynder
21. marts 2006 - 14:16 #19
Ok men hva så med de tre her??

\Soeg_Dato.aspx.cs(92): Property or indexer 'System.DateTime.Day' cannot be assigned to -- it is read only
\Soeg_Dato.aspx.cs(93): Property or indexer 'System.DateTime.Month' cannot be assigned to -- it is read only
\Soeg_Dato.aspx.cs(94): Property or indexer 'System.DateTime.Year' cannot be assigned to -- it is read only
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 16:56 #20
private void Button1_Click(object sender, System.EventArgs e)
        {
            if (!(Page.IsValid))
            {
                return;
            }
            }
        FormatProvider culture = new CultureInfo("da-DK", true);
        DateTime Start =DateTime.Parse(txtStart.Text,culture,                          DateTimeStyles.NoCurrentDateDefault);
DateTime Slut=DateTime.Parse(txtSlut.Text,culture,                          DateTimeStyles.NoCurrentDateDefault);

            string strConnection;
                   
            string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN "+Start+ "AND" +Slut+"";
       
            strConnection = "user id=Webuser;password=xxxxx;";
            strConnection += "initial catalog=log;server=sqlNY;";
            strConnection += "Connect Timeout=30";

            SqlConnection conn = new SqlConnection( strConnection );
            SqlCommand cmd = new SqlCommand( Sql, conn );       

            DataSet ds = new DataSet();
            SqlDataAdapter adpt = new SqlDataAdapter( cmd );
            cmd.Connection.Open();

            try
            {
                adpt.Fill( ds );
            }
            finally
            {
                cmd.Connection.Close();
            }

            DataGrid1.DataSource = ds;
            DataGrid1.DataBind();
        }
    }
Avatar billede sbaht Nybegynder
22. marts 2006 - 07:32 #21
Jeg fatter det ikke, den bliver ved med at komme med nedenstående fejl, har du nogen ide om hvad det er der laver fejlen??

Line 1: Incorrect syntax near '00'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '00'.
Avatar billede sbaht Nybegynder
22. marts 2006 - 08:09 #22
Kan det være sql strengen der er noget galt med??
Avatar billede dr_chaos Nybegynder
22. marts 2006 - 10:08 #23
prøv med
string Sql = "SELECT * FROM dbo.log_Data WHERE Date BETWEEN '"+Start+ "' AND '" +Slut+"'";
Avatar billede sbaht Nybegynder
22. marts 2006 - 11:00 #24
Det hjalp, det var dejligt.. Takker mange gange for hjælpen, det var en lang omgang.
Avatar billede dr_chaos Nybegynder
22. marts 2006 - 11:03 #25
Langtfra den værste jeg har prøvet:)
smider lige et svar :)
Avatar billede sbaht Nybegynder
22. marts 2006 - 11:10 #26
Ok så er jeg mere rolig, jeg var begyndt at blive bekymrede for om der var point nok i det her spm. :-)
Avatar billede dr_chaos Nybegynder
22. marts 2006 - 11:26 #27
Jojo det er helt fint :)

Men det er en personlig vurdering hvor mange points man vil give ud.
Nogen vil kun give 0 :(
Avatar billede sbaht Nybegynder
22. marts 2006 - 12:37 #28
Ja det er rigtig nok, men får at få hjælp bliver man jo nød til af give lidt point..
Avatar billede dr_chaos Nybegynder
22. marts 2006 - 12:46 #29
helt enig :)
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