Avatar billede brian-johansen Nybegynder
16. august 2005 - 16:34 Der er 19 kommentarer og
1 løsning

kalender update C#

Hej,

Jeg er ved at lave en kalender hvor man skal kunne se aktiviter for forskellige mennesker.

Jeg har lavet det sådan at man kan vælge hvilken person man vil se kalender for via en dropdownbox.

Min problem er bare når jeg trykker på en værdi i min dropdownbox, ændre kalender indholdet sig ikke ?

Hvordan laver jeg det smartest ?
Avatar billede snepnet Nybegynder
16. august 2005 - 16:47 #1
du bygger det op sådan her :

// i page_load
if(!IsPostBack)
{
  PopulateCalender();
}

// en metode til at få proppet det ind i kalenderen der skal være
protected void PopulateCalender()
{
  // ... hvordan du nu gør
}

// en handler
protected void ddList_SelectedIndexChanged(object sender, EventArgs e)
{
  // ... gør hvad der skal gøres og
  PopulateCalender();
}

mvh
Avatar billede snepnet Nybegynder
16. august 2005 - 16:47 #2
det er mønsteret for den slags.
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 16:53 #3
okay... er det sådan jeg kan få dig til at beskrive de forskellige ting lidt nærmere ?

Hvad mener du mener du med PopulateCalender ?
Avatar billede snepnet Nybegynder
16. august 2005 - 17:03 #4
ikke noget særligt ... jeg går ud fra at du har noget kode der sørger for at der kommer indhold i kalenderen - det er bare det der skal lægges der.

hvad vil du have beskrevet yderligere - handleren til ændringen i dropdownlisten er bare helt standard, og jeg ved ikke hvad du normalt gør i den metode, men det skal du self. fortsat gøre.
du skal så også bare sørge for at kalde den metode der hælder indhold i kalenderen.

jeg kunne forestille mig at det er noget i denne stil du skal lave :
// i page_load
if(!IsPostBack)
{
  // måske skal der default vises schedule for en bruger der er logget ind ?!?
  PopulateCalender(loggedInUserId);
}

// en metode til at få proppet det ind i kalenderen der skal være
protected void PopulateCalender(int personId)
{
  DataTable data = someDataAccessThing.GetSchedule(personId);
  someDataBoudCalender.DataSource = data;
  someDataBoudCalender.DataBind();
}

// en handler
protected void ddList_SelectedIndexChanged(object sender, EventArgs e)
{
  DropDownList list = sender as Calender;
  int personId = int.Parse(list.SelectedValue);
  PopulateCalender(personId);
}

mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 17:18 #5
Mit indhold til kalenderen kommmer fra en dayrender.

Koden til min dropdown liste er:

dstaff.DataSource = ds4.Tables[0];
dstaff.DataMember="bruger";
dstaff.DataValueField="brugerid";
dstaff.DataBind();



Jeg må lige prøve at rode lidt med det for jeg tror umiddelbart jeg kan finde ud af det

mvh
Avatar billede snepnet Nybegynder
16. august 2005 - 17:23 #6
det er noget mere din dayrender der er interessant at se.... men hvis det er sådan du gør, er det muligvis et cachingproblem du har - prøv lige at smid denne her i page_load :
Response.Cache.SetCacheability(HttpCacheability.NoCache)
mvh
Avatar billede snepnet Nybegynder
16. august 2005 - 17:23 #7
(bare lige for et check)
Avatar billede brian-johansen Nybegynder
16. august 2005 - 17:32 #8
Der er ingen forskel med når jeg trykker på et navn i min dropdown, virker det ikke som om den ved den skal hente dataene igen
Avatar billede snepnet Nybegynder
16. august 2005 - 17:34 #9
du må lige vise mig hvordan du henter dine data - hele metoden.
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 17:40 #10
private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
{
DateTime datoTmp = DateTime.Parse(Calendar1.SelectedDate.ToShortDateString());
string bruger = dstaff.DataValueField.ToString();
string date = datoTmp.ToString("MM-dd-yyyy");
string strDSN=@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=";
strDSN+=Server.MapPath("data\\kalender.mdb");
OleDbConnection myConn2 = new OleDbConnection(strDSN);
//string strSQL = "Select dato,tid,kampange,emne,Kalendertekst,sted From event Where dato=#"+date+"#";
string strSQL = "Select event.dato,event.tid,event.kampange,event.emne,event.Kalendertekst,event.sted,bruger.brugerid From event, bruger Where event.dato=#"+date+"# AND bruger.brugerid ="+bruger+"";
OleDbDataAdapter myCmd = new OleDbDataAdapter(strSQL, myConn);
myConn2.Open();
DataSet dsDate = new DataSet();
myCmd.Fill(dsDate,"event");
   
if(dsDate.Tables[0].Rows.Count==0)
{
DataGrid1.Visible = false;
aftale.Visible = true;
aftale.Text = "Der er ingen aftaler i dag";
}
else
{
DataGrid1.Visible = true;
DataGrid1.DataSource = dsDate;
DataGrid1.DataBind();
aftale.Visible = false;
}
myConn2.Close();
dato.Text = Calendar1.SelectedDate.ToShortDateString();
}

private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
if (!e.Day.IsOtherMonth)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
if ((dr["dato"].ToString() != DBNull.Value.ToString()))
{
DateTime dtEvent = (DateTime)dr["dato"];
if (dtEvent.Equals(e.Day.Date))
{
e.Cell.BackColor = System.Drawing.Color.DarkOrange;
e.Cell.Controls.Add(new LiteralControl("<br>" + dr["tid"].ToString() + " - " + dr["emne"].ToString()));
}
}
else
{
e.Cell.Text = "";
}
   
}
if (!e.Day.IsOtherMonth)
{
foreach (DataRow dr1 in ds1.Tables[0].Rows)
{
if ((dr1["dato"].ToString() != DBNull.Value.ToString()))
{
DateTime dthellig = (DateTime)dr1["dato"];
if (dthellig.Equals(e.Day.Date))
{
e.Cell.BackColor = System.Drawing.Color.CadetBlue;
e.Cell.Controls.Add(new LiteralControl("<br>" + dr1["navn"].ToString()));
}
}
else
{
e.Cell.Text = "";
}
               
}
       

myConn.Close();
   
}

}
}
Avatar billede snepnet Nybegynder
16. august 2005 - 17:46 #11
det her :

string bruger = dstaff.DataValueField.ToString();

ser helt forkert ud i mine øjne... du skal vel bruge den værdi der aktuelt er valgt - som noget i denne stil :

int personId = int.Parse(dstaff.SelectedValue);

mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 17:54 #12
Okay... det vil sige at select sætning vil komme til at lyde sådan

int personId = int.Parse(dstaff.SelectedValue);
string strSQL = "Select event.dato,event.tid,event.kampange,event.emne,event.Kalendertekst,event.sted,bruger.brugerid From event, bruger Where event.dato=#"+date+"# AND bruger.brugerid ="+personId+"";


eller er jeg helt ude på et side spor ?
Avatar billede snepnet Nybegynder
16. august 2005 - 17:58 #13
nej det er du ikke ... det der giver mere mening, men det er lidt noget kludder at du laver din sql på den måde - du skulle hellere bruge parametre... meget nemmere - meget sikrere.
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 18:00 #14
okay... har du et eksempel liggende ?
Avatar billede snepnet Nybegynder
16. august 2005 - 18:03 #15
arne har lagt i stakkevis af dem herud :o)
men her et link :
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 18:06 #16
okay... jeg kigger lige på den Mange tak for hjælpen !


Jeg har lige et sidste spørgsmål:

Når jeg skriver:
int personId = int.Parse(dstaff.SelectedValue);


Får jeg at vide:
'System.Web.UI.WebControls.DropDownList' does not contain a definition for 'SelectedValue'
Hvilken en skal jeg bruge istedet for ?
Avatar billede snepnet Nybegynder
16. august 2005 - 18:08 #17
helt iorden - du siger bare til... og hils.
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 18:10 #18
ok.. tak smider du et svar
Avatar billede snepnet Nybegynder
16. august 2005 - 18:16 #19
får du her :o)
mvh
Avatar billede brian-johansen Nybegynder
16. august 2005 - 18:18 #20
Mange tak for hjælpen
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