| Forum: ASP.NET2.0 | 
																Thema: 
																	Belegt Status anzeigen ! | 
																	Von: 
																		Thomas Hauser (
																	19.08.2007 20:59) | 
													
												
            
		Hallo Thomas,
kein Grund nervös zu werden.
Immer locker. ;-)
Aber Du hast Recht, der Code hätte schöner sein können von Reflector.
ASPX-Datei
<%@ Page Language="VB" AutoEventWireup="true"  CodeFile="Default.aspx.vb" Inherits="_Default" EnableViewState="true" %>
<!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="Ressourcen">
            <SelectParameters>
                <asp:ControlParameter ControlID="Calendar1" DefaultValue="DateTime.Now" Name="BeginDate"
                    PropertyName="SelectedDate" Type="DateTime" />
                <asp:ControlParameter ControlID="Calendar2" DefaultValue="DateTime.Now" Name="EndDate"
                    PropertyName="SelectedDate" Type="DateTime" />
            </SelectParameters>
        </asp:ObjectDataSource>
    </div>
    </form>
</body>
</html>
CODE-BEGIND
Partial Class _Default
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Aktuelle Woche:
        If Not Page.IsPostBack Then
            Dim day As Integer = CType(DateTime.Now.DayOfWeek, Integer)
            Calendar1.SelectedDate = DateTime.Now.AddDays(-1 * (day - 1))
            Calendar2.SelectedDate = DateTime.Now.AddDays(7 - day)
        End If
        AddHandler GridView1.DataBound, AddressOf GridView1_DataBound
    End Sub
    Private Sub GridView1_DataBound(ByVal sender As Object, ByVal e As EventArgs)
        For Each gridrow As GridViewRow In GridView1.Rows
            For Each cell As TableCell In gridrow.Cells
                If cell.Text = "belegt" Then
                    cell.CssClass = "RessourceNotFree"
                Else
                    If cell.Text = " " Then
                        cell.CssClass = "RessourceFree"
                        cell.Text = "frei"
                    End If
                End If
            Next
        Next
    End Sub
End Class
RESSOURCEN-Klasse:
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Public Class Ressourcen
    ' Fields 
    Private _BeginDate As DateTime
    Private _EndDate As DateTime
    ' Properties 
    Public Property BeginDate() As DateTime
        Get
            Return Me._BeginDate
        End Get
        Set(ByVal value As DateTime)
            Me._BeginDate = value
        End Set
    End Property
    Public Property EndDate() As DateTime
        Get
            Return Me._EndDate
        End Get
        Set(ByVal value As DateTime)
            Me._EndDate = value
        End Set
    End Property
    ' Methods 
    Public Sub New()
        Dim dayOfWeek As Integer = CType(DateTime.Now.DayOfWeek, Integer)
        Me._BeginDate = DateTime.Now.AddDays(CType(-1 * (dayOfWeek - 1), Integer))
        Me._EndDate = DateTime.Now.AddDays(CType(7 - dayOfWeek, Integer))
    End Sub
    Public Sub New(ByVal BeginDate As DateTime, ByVal EndDate As DateTime)
        Me.BeginDate = BeginDate
        Me.EndDate = EndDate
    End Sub
    Public Function GetDataTable() As DataTable
        Dim belegungen As New DataTable("Belegungen")
        Using connection As SqlConnection = New SqlConnection()
            connection.ConnectionString = ConfigurationManager.ConnectionStrings("myConString").ConnectionString
            connection.Open()
            Dim command As New SqlCommand
            command.Connection = connection
            command.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)"
            command.Parameters.AddWithValue("@Start", Me.BeginDate)
            command.Parameters.AddWithValue("@End", Me.EndDate)
            Dim table2 As New DataTable("Daten")
            table2.Load(command.ExecuteReader)
            connection.Close()
            belegungen.Columns.Add("Raum", GetType(String))
            Dim span As TimeSpan = CType((Me.EndDate - Me.BeginDate), TimeSpan)
            Dim i As Integer = 0
            Do While (i <= span.TotalDays)
                Dim columnName As String = Me.BeginDate.AddDays(i).ToString("dd.MM.yy")
                belegungen.Columns.Add(columnName, GetType(String))
                i += 1
            Loop
            Dim row As DataRow
            For Each row In table2.Rows
                Dim minValue As DateTime = DateTime.MinValue
                Dim time2 As DateTime = DateTime.MinValue
                If (Not row.Item("Startdatum") Is DBNull.Value) Then
                    minValue = CDate(row.Item("Startdatum"))
                End If
                If (Not row.Item("Stopdatum") Is DBNull.Value) Then
                    time2 = CDate(row.Item("Stopdatum"))
                End If
                Dim span2 As TimeSpan = DirectCast((time2 - minValue), TimeSpan)
                Dim row2 As DataRow = Me.SearchRessource(row.Item("RessourcenId"), belegungen)
                If (row2 Is Nothing) Then
                    row2 = belegungen.NewRow
                    belegungen.Rows.Add(row2)
                End If
                row2.Item("Raum") = String.Format(" {0}", row.Item("RessourcenId").ToString)
                Dim j As Integer = 0
                Do While (j <= span2.TotalDays)
                    Dim name As String = minValue.AddDays(j).ToString("dd.MM.yy")
                    If belegungen.Columns.Contains(name) Then
                        row2.Item(name) = "belegt"
                    End If
                    j += 1
                Loop
            Next
            Return belegungen
        End Using
    End Function
    Public Function GetDataTable(ByVal BeginDate As DateTime, ByVal EndDate As DateTime) As DataTable
        Me.BeginDate = BeginDate
        Me.EndDate = EndDate
        Return Me.GetDataTable()
    End Function
    Private Function SearchRessource(ByVal Ressource As Object, ByVal belegungen As DataTable) As DataRow
        Dim row As DataRow
        For Each row In belegungen.Rows
            If (row.Item("Raum").ToString = String.Format("Raum {0}", Ressource.ToString)) Then
                Return row
            End If
        Next
        Return Nothing
    End Function
End Class
Hoffe, die Welt ist jetzt endgültig in Ordnung. ;-)
Grüße,
Thomas
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: Belegt Status anzeigen ! 
														
															
																| Super vielen vielen Dank..<br>Ich muss vor lauter stolz sagen .. Ein wenig hatte ich den Code auch schon so ähnlich :-)<br><br>Danke für deine ganze Mühe, jetzt kann ich in VB weitermachen und auch Ajax... |  |  
																|  |  |  |  | Thomas 
											Scherner | 19.08.2007 21:33 |  
			|  |  
									| 
											
												|   | AW: AW: Belegt Status anzeigen ! 
														
															
																| Hallo Thomas,<br>sorry noch ne Frage. Ich wollte den Startbuchungstag und den Endbuchungstag Orange färben. Hatte mir gedacht das mache ich über den Text Anreise also ungefähr so:<br>Do While (j <=... |  |  
																|  |  |  |  | Thomas 
											Scherner | 20.08.2007 00:47 |  
			|  |  
									| 
											
												|   | AW: AW: AW: Belegt Status anzeigen ! 
														
															
																| Hallo Thomas,<br><br>spiel doch mal Framework. ;-)<br>Wandere durch den Code und überleg Dir was passiert.<br>Das kann so net gehen.<br>Tipp: Du hast nur die Schleifen verdoppelt. Wozu? Nur der Inhalt ist... |  |  
																|  |  |  |  | Thomas
											Hauser | 21.08.2007 16:40 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: Belegt Status anzeigen ! 
														
															
																| Hallo Thomas,<br>sorry konnte nicht debuggen da ich probleme mit dem Connect zum SQL hatte.<br>Es klappt so nicht. Ich bekomme einen fehler z.b. Wenn ich 13.08 als Start im Calender auswähle und 14.08... |  |  
																|  |  |  |  | Thomas 
											Scherner | 21.08.2007 22:05 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: Belegt Status anzeigen... 
														
															
																| Hallo Thomas,<br>ich glaube ich habe einen Logik Fehler... Wenn der Name immer einem Datum ist und ich nur einen Datensatz vergleiche kann anabreise nicht gehen, da beide kriterien nicht gleichzeitig... |  |  
																|  |  |  |  | Thomas 
											Scherner | 21.08.2007 22:54 |  
			|  |  
									| 
											
												|   | Belegt Status anzeigen ! 
														
															
																| Hallo Thomas,<br><br>es gibt ein Startdatum und ein Stopdatum. Beide können bei einer 1-Tages-Buchung gleich dem Spaltennamen sein.<br><br>Grüße,<br><br>Thomas |  |  
																|  |  |  |  | Thomas
											Hauser | 21.08.2007 23:33 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: Belegt Status anzeigen... 
														
															
																| Hallo Thomas,<br><br>1. Wenn Du nicht debuggen kannst, dann warte bitte, bis es wieder geht.<br><br>2. Der Codeausschnitt von mir ist korrekt, bis auf das zweimal Stopdatum. Da ist beim Kopieren was schief... |  |  
																|  |  |  |  | Thomas
											Hauser | 21.08.2007 23:32 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW: Belegt Status... 
														
															
																| Hallo Thomas,<br>du wirst mich jetzt sicher auslachen. Ich habe seit 2 Wochen debugt und schaffe es nicht es fertig zu bekommen. Es kann sein das eine Buchung am z.B. 01.10.07 aufhört und eine neue am... |  |  
																|  |  |  |  | Thomas 
											Scherner | 22.09.2007 01:43 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW: AW: Belegt... 
														
															
																| Hallo Thomas,<br><br>row("Anreise") würde bedeuten, dass Du in der aktuellen Zeile auf die Spalte "Anreise" zugreifst. Die wird aber nie existieren, weshalb der Teil innerhalb des IF-Blocks niemals... |  |  
																|  |  |  |  | Thomas
											Hauser | 22.09.2007 11:21 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW: AW: AW:... 
														
															
																| Hallo Retter :-),<br>es ist leider so das ein Raum bis Mittags geräumt werden muss damit am GLEICHEN Tag noch eine Belegung stattfinden kann.Also heist es für mich umbauen :-( Ich muss also wirklich... |  |  
																|  |  |  |  | Thomas 
											Scherner | 22.09.2007 12:22 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW: AW: AW:... 
														
															
																| Hallo Thomas,<br><br>das kommt drauf an, was in der Datenbank steht. Wenn da die Anreise auch am gleichen Tag ist, musst Du natürlich row[name].ToString() = "Abreise" prüfen. Ist in der Datenbank aber der... |  |  
																|  |  |  |  | Thomas
											Hauser | 22.09.2007 13:19 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW: AW:... 
														
															
																| Ich habe es jetzt so geschrieben,<br>doch er läuft immer an der Anweisung vorbei... <br>Dim j As Integer = 0<br>                <br>                Do While (j <= span2.TotalDays)<br>                    Dim... |  |  
																|  |  |  |  | Thomas 
											Scherner | 22.09.2007 13:54 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW: AW:... 
														
															
																| Hallo Thomas,<br><br>liest Du meine Posts? Ich hoffe ja!<br><br>Also, die Spalte "Anreise" existiert doch gar nicht. Was soll denn dabei herauskommen? Du hast sowas wie nen Raum und Du hast viele, viele... |  |  
																|  |  |  |  | Thomas
											Hauser | 22.09.2007 14:21 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW:... 
														
															
																| Tut mir leid Thomas,<br>ich bin nicht in der Lage es umzusetzen. Verstehe zu wenig davon.<br>OK die Row (anreise) gibt es nicht. Aber in meinem Kopf steht wenn da schon Anreise in der Celle steht also... |  |  
																|  |  |  |  | Thomas 
											Scherner | 22.09.2007 15:35 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW: AW:... 
														
															
																| Hi,<br><br>jetzt glaube ich habe ich es verstanden. Ich denke, Du hast einfach so die Spaltennamen im SQL geändert. Das hieß damals noch Startdatum und Stopdatum. Wie kannst Du mich nur so verwirren.... |  |  
																|  |  |  |  | Thomas
											Hauser | 22.09.2007 16:21 |  
			|  |  
									| 
											
												|   | AW: AW: AW: AW:... 
														
															
																| Sorry das ich den Kaiserschnitt der Geburt gefordert habe :-)<br>Er warf nochmal kurz einen Fehler die Spalte gehört nicht zur Tabelle Belegungen aber da habe ich :-))))) (habe auch ein wenig was... |  |  
																|  |  |  |  | Thomas 
											Scherner | 22.09.2007 16:41 |  
			|  |  | 
	
							Antworten
							
							
							Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!