none
Panner erstellen mit SQL Datenbank RRS feed

  • 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.


    Samstag, 4. November 2017 08:23

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

    Samstag, 4. November 2017 13:04
  • 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

    Sonntag, 5. November 2017 14:48
  • 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


    Samstag, 4. November 2017 11:24

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

    Samstag, 4. November 2017 08:55
  • Hallo Peter,

    Mit WPF habe ich noch weniger Erfahrung als mit VB.net, würde es auch gerne erlernen. Bin für jede Hilfe dankbar, da ich mir alles via Forum/YouTube und Bücher beibringe.

    Vielen Dank für deinen input.

    Viele Grüsse

    Darko

    Samstag, 4. November 2017 10:28
  • 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


    Samstag, 4. November 2017 11:24
  • 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

    Samstag, 4. November 2017 13:04
  • 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

    Samstag, 4. November 2017 14:38
  • Hi Peter,

    Danke für die Demo, werde es mir später ansehen.

    Grüsse

    Darko

    Samstag, 4. November 2017 14:38
  • Hallo Peter,

    sowas in diese Richtung suche ich, wie kann ich nun den Balken das Jahr,Monat,Tag,von,bis,.... mitgeben, welches in die Datenbank geschrieben wurden?

    Grüsse

    Danke

    Sonntag, 5. November 2017 13:48
  • 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

    Sonntag, 5. November 2017 14:48
  • 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


    Freitag, 24. November 2017 11:20