Forum: ASP.NET2.0 |
Thema:
AW: AW: Belegt Status anzeigen ! |
Von:
Thomas Hauser (
15.08.2007 22:08) |
Hallo Thomas,
sorry, das war wohl meine Schuld. Bin in der Zeile verrutscht.
Der Inhalt der Spalte soll nur dann angelegt werden, wenn die Spalte existiert. Also erst den Spaltennamen berechnen, dann den Spalteninhalt "versuchen" anzulegen. "Versuchen" heißt, dass der nur festgelegt wird, wenn das Datum in der Auswertung betrachtet wird.
string colname = start.AddDays(day).ToShortDateString();
if (belegungen.Columns.Contains(colname))
resRow[colname] = "belegt";
Für Deine zweite Frage habe ich zwei Möglichkeiten im folgenden Snippet reingeschrieben. Möglichkeit 1 ist die anderen Ressourcen auch mit zu nehmen. Aber nicht alle Buchungen. Sonst muss er so viel Zeilen umsonst bearbeiten. Deshalb bediene ich mir hier dem union.
Möglichkeit 2 ist eben alle Zeilen zu betrachten. Geht deshalb, weil diese nicht im Auswertungszeitraum sind, und somit nie in die Tabelle gelangen können.
using System;
using System.Data;
using System.Configuration;
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.Data.SqlClient;
public class Ressourcen
{
private DateTime begin;
public DateTime Begin
{
get { return begin; }
set { begin = value; }
}
private DateTime end;
public DateTime End
{
get { return end; }
set { end = value; }
}
public Ressourcen()
{
int day = (int)DateTime.Now.DayOfWeek;
this.Begin = DateTime.Now.AddDays(-1 * (day - 1));
this.End = DateTime.Now.AddDays(7 - day);
}
public Ressourcen(DateTime Begin, DateTime End)
{
this.Begin = Begin;
this.End = End;
}
public DataTable GetDataTable(DateTime Begin, DateTime End)
{
this.Begin = Begin;
this.End = End;
return GetDataTable();
}
public DataTable GetDataTable()
{
DataTable belegungen = new DataTable("Belegungen");
using (SqlConnection con = new SqlConnection())
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["myConString"].ConnectionString;
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
//Möglichkeit 1:
cmd.CommandText = @"select
RessourcenId, Startdatum, Stopdatum
from
belegung
where
Startdatum between @Start and @End
or Stopdatum between @Start and @End
union
select
distinct RessourcenId, null, null
from
belegung
where
not(Startdatum between @Start and @End
or Stopdatum between @Start and @End)";
cmd.Parameters.AddWithValue("@Start", Begin);
cmd.Parameters.AddWithValue("@End", End);
//Möglichkeit 2: cmd.CommandText = "select * from Belegung";
//cmd.CommandText = "select * from Belegung where Startdatum between @Start and @End or Stopdatum between @Start and @End";
//cmd.Parameters.AddWithValue("@Start", Begin);
//cmd.Parameters.AddWithValue("@End", End);
DataTable data = new DataTable("Daten");
data.Load(cmd.ExecuteReader());
con.Close();
belegungen.Columns.Add("Raum", typeof(string));
TimeSpan span = (TimeSpan)(End - Begin);
for (int day = 0; day <= span.TotalDays; day++)
{
string colname = Begin.AddDays(day).ToShortDateString();
belegungen.Columns.Add(colname, typeof(string));
}
foreach (DataRow row in data.Rows)
{
//Hier habe ich was geändert, damit Spalten mit NULL-Werten berücksichtigt werden können (für Möglichkeit 1)
DateTime start = DateTime.MinValue;
DateTime end = DateTime.MinValue;
if (row["Startdatum"] != DBNull.Value)
start = (DateTime)row["Startdatum"];
if (row["Stopdatum"] != DBNull.Value)
end = (DateTime)row["Stopdatum"];
TimeSpan spanRow = (TimeSpan)(end - start);
DataRow resRow;
resRow = SearchRessource(row["RessourcenId"], belegungen);
if (resRow == null)
{
resRow = belegungen.NewRow();
belegungen.Rows.Add(resRow);
}
resRow["Raum"] = string.Format("Raum {0}", row["RessourcenId"].ToString());
for (int day = 0; day <= spanRow.TotalDays; day++)
{
string colname = start.AddDays(day).ToShortDateString();
if (belegungen.Columns.Contains(colname))
resRow[colname] = "belegt";
}
}
}
return belegungen;
}
private DataRow SearchRessource(object Ressource, DataTable belegungen)
{
foreach (DataRow row in belegungen.Rows)
{
if (row["Raum"].ToString() == string.Format("Raum {0}", Ressource.ToString()))
{
return row;
}
}
return null;
}
}
Thomas Hauser (Trainer und Consultant, Blog: http://thomashauser.spaces.live.com, Forum: http://www.sharepointbook.de - Die Forum-Webseite zum Buch!)
Betreff |
Von |
Datum |
|
|
AW: AW: AW: Belegt Status anzeigen !
Hallo Thomas ,<br>deine Schuld never. Ich kann halt alleine zu wenig.<br>Es läuft alles wieder nur Belegt und frei zeigt er nicht an. Das heist Belegt ist weiss mit schrift belegt und frei wird mit der... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 23:22 |
|
|
AW: AW: AW: AW: Belegt Status anzeigen !
Es wird in jede Zelle beim ersten Durchlauf belegt reingeschrieben.<br>Deswegen geht er im Behind nicht mehr und setzt sie frei.<br>Da ist glaube ich ein Denkdreher drin ...<br><br>Gruß<br>Thomas |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 23:36 |
|
|
AW: AW: AW: AW: AW: Belegt Status anzeigen !
Irgendwo musst Du was beim Kopieren des Codes vergessen haben. Hier nochmals der ganze Code. Sorry, aber bei mir funscht das!<br><br>ASPX:<br><%@ Page Language="C#" AutoEventWireup="true" ... |
|
|
|
|
|
Thomas
Hauser
|
15.08.2007 23:46 |
|
|
FERTIG !!
Hallo Thomas !<br>FINALE juhuuu alles stimmt .<br>Alles ist schnell und klasse. Es braucht nichts mehr geändert werden.<br><br>Super vielen Dank für alles.<br>Ich werde wenn ich darf die in deinem Blog anmailen... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 23:48 |
|
|
AW: FERTIG !!
Hallo Thomas,<br><br>Natürlich kann und darf jeder mir über meinen Blog Nachrichten schreiben. Aber es ist im Sinne des Community-Gedanken, dass die Fragen im Forum gestellt werden und die Informationen... |
|
|
|
|
|
Thomas
Hauser
|
16.08.2007 00:37 |
|
|
AW: AW: FERTIG !!
Hallo Thomas,<br>so war das auch nicht gemeint. Wollte nur nicht so das Forum zu texten.<br>Ich habe noch 2 Fragen bitte.<br>Ich habe das Datum umformatiert und zwar so:<br>string colname =... |
|
|
|
|
|
Thomas
Scherner
|
16.08.2007 14:19 |
|
|
AW: AW: AW: FERTIG !!
Hallo Thomas,<br><br>kein Problem.<br>Das Umformatierung des Datums ist kein Problem, solange Du das an beiden Stellen machst.<br>Zeile 95: string colname = Begin.AddDays(day).ToString("dd.MM.yy");<br>Zeile... |
|
|
|
|
|
Thomas
Hauser
|
16.08.2007 15:05 |
|
|
AW: AW: AW: AW: FERTIG !!
Hallo Thomas,<br>es hat alles so geklappt. Vielen Dank.<br>Das Statement ist auch so vollkommen ok habe die Möglichkeit 1 genommen.<br>Jetzt wollte ich sowas wie eine schnellbelegung bauen direkt aus der... |
|
|
|
|
|
Thomas
Scherner
|
19.08.2007 13:19 |
|
|
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!