Forum: ASP.NET2.0 |
Thema:
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: Belegt Status anzeigen ! |
Von:
Thomas Hauser (
14.08.2007 16:44) |
Hallo Thomas,
also das geht ja ganz easy mit ner eigenen Klasse. Naja, easy is etwas übertrieben. ;-)
Im Übrigen steht da ein ganz toller Artikel zur ObjectdataSource in der ASP.NET Professional Ausgabe 01/2007!! Aber die hast Du ja hoffentlich abonniert. ;-)
Also Vorgehen:
1. Eigene Klasse (dient dann als ObjectDataSource)
2. Seite, die
a. zwei Kalendersteuerelemente zum Filtern,
b. eine GridView und
c. eine ObjectDataSource hat.
3. DataBound-Ereignis implementieren, um die CssClass in den Zellen zu setzen.
Code zu 1.
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;
/// <summary>
/// Zusammenfassungsbeschreibung für Resource
/// </summary>
public class Ressource
{
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 Ressource()
{
int day = (int)DateTime.Now.DayOfWeek;
this.Begin = DateTime.Now.AddDays(-1 * (day - 1));
this.End = DateTime.Now.AddDays(7 - day);
}
public Ressource(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;
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));
foreach (DataRow row in data.Rows)
{
DateTime start = (DateTime)row["Startdatum"];
DateTime end = (DateTime)row["Stopdatum"];
TimeSpan span = (TimeSpan)(end - start);
for (int day = 0; day <= span.TotalDays; day++)
{
string colname = start.AddDays(day).ToShortDateString();
if (!belegungen.Columns.Contains(colname))
belegungen.Columns.Add(colname, typeof(string));
}
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 <= span.TotalDays; day++)
{
string colname = start.AddDays(day).ToShortDateString();
resRow[colname] = "frei";
}
}
}
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;
}
}
ASPX-Code zu 2.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Frei-/Belegtinformationen</title>
<style type="text/css">
div {
float: none;
}
div.filterField {
float: left;
}
.Grid {
width: 100%;
}
.RessourceFree {
background-color: Green;
}
.RessourceNotFree {
background-color: Red;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<div class="filterField">
<asp:Label ID="BeginLabel" runat="server" Text="Startdatum" AssociatedControlID="Calendar1"/>
<asp:calendar ID="Calendar1" runat="server"></asp:calendar>
</div>
<div class="filterField">
<asp:Label ID="EndLabel" runat="server" Text="Enddatum" AssociatedControlID="Calendar2"/>
<asp:calendar ID="Calendar2" runat="server"></asp:calendar>
</div>
</div>
<div>
<asp:GridView ID="GridView1" runat="server" CssClass="Grid" DataSourceID="ObjectDataSource1"></asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetDataTable"
TypeName="Ressource">
<SelectParameters>
<asp:ControlParameter ControlID="Calendar1" DefaultValue="DateTime.Now" Name="Begin"
PropertyName="SelectedDate" Type="DateTime" />
<asp:ControlParameter ControlID="Calendar2" DefaultValue="DateTime.Now" Name="End"
PropertyName="SelectedDate" Type="DateTime" />
</SelectParameters>
</asp:ObjectDataSource>
</div>
</form>
</body>
</html>
Code-Behind zu 3.
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 partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Aktuelle Woche:
int day = (int)DateTime.Now.DayOfWeek;
Calendar1.SelectedDate = DateTime.Now.AddDays(-1 * (day - 1));
Calendar2.SelectedDate = DateTime.Now.AddDays(7 - day);
GridView1.DataBound += new EventHandler(GridView1_DataBound);
}
void GridView1_DataBound(object sender, EventArgs e)
{
foreach (GridViewRow gridrow in GridView1.Rows)
{
foreach (TableCell cell in gridrow.Cells)
{
if (cell.Text == "frei")
cell.CssClass = "RessourceFree";
else
{
if (cell.Text == " ")
{
cell.CssClass = "RessourceNotFree";
cell.Text = "belegt";
}
}
}
}
}
}
Thomas Hauser (Trainer und Consultant, Blog: http://thomashauser.spaces.live.com, Forum: http://www.sharepointbook.de - Die Forum-Webseite zum Buch!)
Betreff |
Von |
Datum |
|
|
Thomas
Scherner
|
14.08.2007 18:04 |
|
|
Thomas
Scherner
|
15.08.2007 02:10 |
|
|
Thomas
Hauser
|
15.08.2007 02:46 |
|
|
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW:...
Hallo Thomas,<br>es sieht schon sehr gut aus.. Einen Fehler bekomme ich beim datumswechsel :-(<br><br>Spalte '26.08.2007' gehört nicht zu Tabelle Belegungen. <br>Beschreibung: Unbehandelte Ausnahme beim... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 08:35 |
|
|
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW:...
Hallo Thomas,<br><br>der Fehler kann theoretisch dann vorkommen, wenn eine Belegung über mehrere Tage geht und der Start- oder Endzeitraum nicht in der Auswertungsspanne liegt.<br><br>Einfach wie folgt... |
|
|
|
|
|
Thomas
Hauser
|
15.08.2007 17:13 |
|
|
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW:...
Hallo Thomas,<br>es läuft jetzt erstmal soweit das eine saubere Anzeige kommt.<br>Bis auf zwei Kleinigkeiten:<br>Es ist Frei und belgt vertauscht und ich finde nicht wo ich es einstellen kann sorry.. Grün... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 15:07 |
|
|
Thomas
Hauser
|
15.08.2007 17:15 |
|
|
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW: AW:...
Hallo Thomas ,<br>habe genau dein letzte Klasse genommen und da ist es aufgetreten.<br>Muste auch Clss Ressourcen in Resource ändern da er da genörgelt hatte.<br><br>Ich probiere es gleich aus..<br><br>Vielen... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 17:19 |
|
|
AW: AW: AW: AW: AW: AW: AW: AW: AW: AW:...
Hallo Thomas,<br><br>das mit dem Namen der Klasse liegt einfach daran, dass ich beide im Projekt habe und die mit gleichem Namen, würde wohl zu nem Problem führen. ;-)<br><br>Wegen dem belegt/frei:<br>In meinem... |
|
|
|
|
|
Thomas
Hauser
|
15.08.2007 18:47 |
|
|
AW: Belegt Status anzeigen !
Hallo Thomas,<br>ich habe jetzt alles versucht zu Übernehmen und jetzt läuft gar nichts mehr :-((so dumm wie ich war kein Backup gemacht..Diesen Code hier nimmt er nicht und nörgelt am String rum..<br>if... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 21:18 |
|
|
AW: AW: Belegt Status anzeigen !
Sorry noch ein Zusatz , weil ich nicht nachgedacht habe.<br>Ich kann ja die ID auf die Ressourcen ( die brauche ich ja zum Buchen ) nehmen und das select dann auf LeftJoin aufbauen. Dann werden immer... |
|
|
|
|
|
Thomas
Scherner
|
15.08.2007 22:05 |
|
|
AW: AW: Belegt Status anzeigen !
Hallo Thomas,<br><br>sorry, das war wohl meine Schuld. Bin in der Zeile verrutscht.<br>Der Inhalt der Spalte soll nur dann angelegt werden, wenn die Spalte existiert. Also erst den Spaltennamen berechnen,... |
|
|
|
|
|
Thomas
Hauser
|
15.08.2007 22:08 |
|
|
AW: AW: AW: Belegt Status...
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...
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:...
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:...
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:...
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!