Benutzer mit den meisten Antworten
Panner erstellen mit SQL Datenbank

Frage
-
Hi Leute,
versuche gerade eine Applikation zu machen welche folgen Aufgabe erstellen soll.
Ziel ist es, wenn ein Task (nr,resource,dauer(hh:mm oder dd),datumvon,datumbis,inhalt,.....) in einer Form erstellt wird soll dieser in einer Kalendertabele (senkrecht) erscheinen.
Habe hierzu eine Exceltabelle wie ich mir das vorstelle, perfekt wäre es auch wenn man in der Tabelle die Task verschieben könnte, aufgrund von Datumänderungen. Vorteil wäre es wenn ein neuer Task erstellt wird und die resource gewählt ist, die Info kommt welcher Zeitraum möglich wäre. Durch doppeltklick sollen die Details zu diesen Task erscheinen.
Vielen Dank für eure Hilfe.
Antworten
-
Hi,
ergänzend zu Stefans Antwort hier mal eine einfache Demo, die ein mögliches Prinzip für solche Balken mit WPF zeigt.XAML:
<Window x:Class="Window17" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="Window17" Height="300" Width="300"> <Window.Resources> <local:Window17VM x:Key="vm"/> </Window.Resources> <Grid DataContext="{StaticResource vm}"> <ListView ItemsSource="{Binding Anzeige}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <Border BorderBrush="black" BorderThickness="2" Width="20" Height="200"> <Canvas > <Rectangle Canvas.Top="{Binding Start}" Height="{Binding Dauer}" Width="18" Fill="Red"/> </Canvas> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid> </Window>
Dazu der ViewModel:
Imports System.Collections.ObjectModel Public Class Window17VM ''' <summary> ''' Zufallzahlengenerator für Demodaten ''' </summary> Private rnd As New Random ''' <summary> ''' Konstruktor ''' </summary> Public Sub New() ' Daten für Anzeige laden LoadData() End Sub Private Sub LoadData() For i = 1 To 10 Anzeige.Add(New Window17Data With {.Start = 20 * rnd.Next(0, 10), .Dauer = 10 * rnd.Next(1, 5)}) Next End Sub ''' <summary> ''' Liste der anzuzeigenden Spalten ''' </summary> ''' <returns></returns> Public Property Anzeige As New ObservableCollection(Of Window17Data) End Class Public Class Window17Data Public Property Start As Integer Public Property Dauer As Integer End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
-
Hi,
da ist erst einmal etwas konzeptionelle Arbeit erforderlich, um die Fragen zu den Daten zu beantworten.Mit den Daten aus der Datenbank füllst Du für jede Aufgabe (Task) ein Datenobjekt, welches alle Daten enthält, die für die Darstellung erforderlich sind.
Als nächstes ist festzulegen, was eine Spalte sein soll.
Dann musst Du festlegen, ob mehrere Datenobjekt in einer Spalte darzustellen sind. Wenn ja und eine horizontale Liste ist zu nutzen, dann musst Du die Datenobjekte gruppieren, d.h. es gibt eine übergeordnete Liste mit einem Element für jede darzustellende Spalte.
Zu klären ist auch, was mit den Spalten passieren soll, zu denen es keine Aufgabe gibt. Das ist notwendig, wenn Du eine horizontale Liste nutzt.
Wenn das alles geklärt ist, dann kannst Du anfangen zu programmieren.
Möglich sind recht viele Lösungen, z.B. ein Canvas für alles, oder eine horizontale ListBox wie in meiner Demo.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
-
Hallo Darko,
um nichts durcheinander zu werfen... VB.NET hat erstmal nicht viel mit WPF zu tun. Das eine ist die Sprache, in der du programmierst, das andere ist die Technologie des Designers.
Die Frage wäre also Winforms oder WPF. Eine andere könnte VB.NET oder C# sein, die ist allerdings beantwortet. Wenn du jetzt lernst, würde ich dir WPF empfehlen, mit VB.NET (weil du damit schon begonnen hast).
Da der Peter Fleischer hier im Forum immer wieder exzellente Beispiele bereitstellt, solltest du dir über die Winforms/WPF Frage Klarheit verschaffen, dann gibt's hier sicherlich sehr gute Unterstützung (auch von vielen anderen hier).
Welche Datenbank möchtest du verwenden (lokale Datenbank, Server, ...) ? Dazu ist wichtig zu wissen, ob es eine Einzelplatz-Anwendung oder eine Anwendung, die von mehreren Benutzern genutzt wird, werden soll.
Gruß, Stefan
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
- Bearbeitet Stefan Krömer Samstag, 4. November 2017 11:25
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
Alle Antworten
-
Hi,
willst Du das in den klassischen alten Windows Forms machen oder in der moderneren WPF-Technologie? Mit WPF hast Du relativ viele und einfache Gestaltungsmöglichkeiten. Mit Windows Forms bleibt Dir vermutlich nur das Selbst-Malen im OnPaint-Ereignis. Wichtig für die Lösung ist das Konzept der Datenhaltung in der Anwendung. Ich vermute mal, dass Du alle Task in einer Liste hast und jeder Task vom Typ einer Klasse ist, die mindestens Beginn, Dauer und Farbe einer Aufgabe halten. In Windows Forms brauchst da nur ein Rechtangle an der betreffenden Position zu "malen". In WPF gibt es verschiedene Möglichkeiten, das zu realisieren, z.B. auch mit Rectangle im Canvas.--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks -
Hallo Darko,
um nichts durcheinander zu werfen... VB.NET hat erstmal nicht viel mit WPF zu tun. Das eine ist die Sprache, in der du programmierst, das andere ist die Technologie des Designers.
Die Frage wäre also Winforms oder WPF. Eine andere könnte VB.NET oder C# sein, die ist allerdings beantwortet. Wenn du jetzt lernst, würde ich dir WPF empfehlen, mit VB.NET (weil du damit schon begonnen hast).
Da der Peter Fleischer hier im Forum immer wieder exzellente Beispiele bereitstellt, solltest du dir über die Winforms/WPF Frage Klarheit verschaffen, dann gibt's hier sicherlich sehr gute Unterstützung (auch von vielen anderen hier).
Welche Datenbank möchtest du verwenden (lokale Datenbank, Server, ...) ? Dazu ist wichtig zu wissen, ob es eine Einzelplatz-Anwendung oder eine Anwendung, die von mehreren Benutzern genutzt wird, werden soll.
Gruß, Stefan
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
- Bearbeitet Stefan Krömer Samstag, 4. November 2017 11:25
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
-
Hi,
ergänzend zu Stefans Antwort hier mal eine einfache Demo, die ein mögliches Prinzip für solche Balken mit WPF zeigt.XAML:
<Window x:Class="Window17" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="Window17" Height="300" Width="300"> <Window.Resources> <local:Window17VM x:Key="vm"/> </Window.Resources> <Grid DataContext="{StaticResource vm}"> <ListView ItemsSource="{Binding Anzeige}"> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <Border BorderBrush="black" BorderThickness="2" Width="20" Height="200"> <Canvas > <Rectangle Canvas.Top="{Binding Start}" Height="{Binding Dauer}" Width="18" Fill="Red"/> </Canvas> </Border> </DataTemplate> </ListView.ItemTemplate> </ListView> </Grid> </Window>
Dazu der ViewModel:
Imports System.Collections.ObjectModel Public Class Window17VM ''' <summary> ''' Zufallzahlengenerator für Demodaten ''' </summary> Private rnd As New Random ''' <summary> ''' Konstruktor ''' </summary> Public Sub New() ' Daten für Anzeige laden LoadData() End Sub Private Sub LoadData() For i = 1 To 10 Anzeige.Add(New Window17Data With {.Start = 20 * rnd.Next(0, 10), .Dauer = 10 * rnd.Next(1, 5)}) Next End Sub ''' <summary> ''' Liste der anzuzeigenden Spalten ''' </summary> ''' <returns></returns> Public Property Anzeige As New ObservableCollection(Of Window17Data) End Class Public Class Window17Data Public Property Start As Integer Public Property Dauer As Integer End Class
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
-
Hallo Stefan,
vielen Dank für deine Info, VB.NET erscheint mir als sehr umgänglich.
WPF hatte ich mir vorher noch nicht angeschaut, sieht aber sehr interessant aus aufgrund der vielen Möglichkeiten.
Datenbank, MySql von HeidiSQL.
Anwendung sollte multi user sein.
Grüsse
Darko
-
Hi,
da ist erst einmal etwas konzeptionelle Arbeit erforderlich, um die Fragen zu den Daten zu beantworten.Mit den Daten aus der Datenbank füllst Du für jede Aufgabe (Task) ein Datenobjekt, welches alle Daten enthält, die für die Darstellung erforderlich sind.
Als nächstes ist festzulegen, was eine Spalte sein soll.
Dann musst Du festlegen, ob mehrere Datenobjekt in einer Spalte darzustellen sind. Wenn ja und eine horizontale Liste ist zu nutzen, dann musst Du die Datenobjekte gruppieren, d.h. es gibt eine übergeordnete Liste mit einem Element für jede darzustellende Spalte.
Zu klären ist auch, was mit den Spalten passieren soll, zu denen es keine Aufgabe gibt. Das ist notwendig, wenn Du eine horizontale Liste nutzt.
Wenn das alles geklärt ist, dann kannst Du anfangen zu programmieren.
Möglich sind recht viele Lösungen, z.B. ein Canvas für alles, oder eine horizontale ListBox wie in meiner Demo.
--
Viele Grüsse
Peter Fleischer (ehem. MVP)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 8. November 2017 13:50
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 16. November 2017 13:57
-
Hallo Peter, das Konzept habe ich mir schon überlegt und weiß auch wo die Reise hin soll,
da ich aber totaler Anfänger bin, stellt es sich noch schwerer als es ist.
Habe mir auch dein Demo angesehen, diese ist was ich suche.
Hier wäre für mich ein sample notwendig, wo ich Aufgrund des Tasks den canvas Position setzte.
TaskID= Canvas name
Datum von bis = marge
Resource= farbe
und wiederum wenn der canvas angetipt wird soll der Task aufgehen für etwaige änderungen, bzw wenn der canvas verschoben wird soll sich das datum anpassen.
Vielen Dank für deine Mühe
VG
Darko