Laden...

Wie kann ich via DataBinding Daten von Textfeldern und Buttons in ein DGV eintragen?

Erstellt von MMazi vor 3 Jahren Letzter Beitrag vor 3 Jahren 493 Views
Thema geschlossen
M
MMazi Themenstarter:in
45 Beiträge seit 2020
vor 3 Jahren
Wie kann ich via DataBinding Daten von Textfeldern und Buttons in ein DGV eintragen?

Hallo Alle zusammen,

Ich habe eine Zeitefassungstool geschrieben mit Windowsform.

Das Tool funktioniert wie folgt:

  1. Start Button ->wird die Statzeit in der Textbox und in erste Spate von dgv eingetragen

  2. Ende Button -> wird die Endzeit in der textbox eingetragen , gleichzeitig wird die Differenz in der Textbox und die Spalte Dauer in dgv eingetragen und zeitgleich wird einen Dialogfenster geöffnet um die Bemerkungen zu schreiben

  3. beim schliessen von Hauptfenster, wird die Daten in einer Textdatei geschrieben und in einem neuen Lokalen Ordner Lokal abgelegt.

das hat ja alles geklappt nun um alles noch besser zu machen bin dabei alles mit WPF zu ersetllen.

ich habe soweit das Layout erstellt ( Bilder in Anhang ) , nun hat sich herausgestellt, dass ganz andere Datenbindung in wpf gilt als Windowsform.

habt Ihr eine Idee wie ich diese Vorhaben realisieren kann, und wie die Daten aus Textfelder und Button in dgv spalten eingetragen werden kann ?

Ich danke euch im voraus.
**
Der Code in windows Form:**

Form1.cs:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;
using System.IO;

namespace Zeiterfassungstool
{
    public partial class Form1 : Form
    {
        //Globale Variabeln

        public DateTime startTime;
        public DateTime endTime;


        string v1 = System.Configuration.ConfigurationManager.AppSettings["k1"];
        string v2 = System.Configuration.ConfigurationManager.AppSettings["k2"];
        string v3 = System.Configuration.ConfigurationManager.AppSettings["k3"];





        public Form1()
        {
            InitializeComponent();

            btnStart.Visible = true;
            btnStart.Text = "Start";


        
        }
        //--------------------------------------START------------------------------------------------
        private void btnStart_Click(object sender, EventArgs e)
        {
            

           
            if (btnStart.Text == "Start")
            {
                this.startTime = DateTime.Now;
                textBox2.Text = startTime.ToString("HH:mm:ss");
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[0].Value = textBox2.Text;
                btnStart.Text = "Ende";
            }
            else
            {
                this.endTime = DateTime.Now;
                textBox3.Text = endTime.ToString("HH:mm:ss");
                int n = dataGridView1.Rows.Count - 1;
                dataGridView1.Rows[n].Cells[1].Value = textBox3.Text;
                TimeSpan dauer;
                dauer = endTime.Subtract(startTime);
                int m = dataGridView1.Rows.Count - 1;
                dataGridView1.Rows[m].Cells[2].Value = dauer.TotalHours.ToString("0.00");

                //--------Bemerkungsdialog----------
                Bemerkung bemerkungdialog = new Bemerkung();
                bemerkungdialog.StartPosition = FormStartPosition.CenterScreen;


                if (bemerkungdialog.ShowDialog() == DialogResult.OK)
                {
                    int d = dataGridView1.Rows.Count - 1;
                    dataGridView1.Rows[d].Cells[3].Value = bemerkungdialog.getBemerkung();
                }
           

                //----------Löschen-------------------
                foreach (Control tbx in Controls)
                {
                    if (tbx.GetType() == typeof(TextBox))
                    {
                        ((TextBox)tbx).Clear();
                    }
                }
               
                btnStart.Text = "Start";
            }
        }
        //--------------------------------------ENDE------------------------------------------------
        
    


  
        //-----------------------------------Speichern-------------------------------------------
        

     
        //------------------------------------SizeChanged. NotifyIcon-------------------------------------------
        private void Form1_SizeChanged(object sender, EventArgs e)
        {

            if (this.WindowState == FormWindowState.Minimized)
            {
                notifyIcon1.Icon = SystemIcons.Application;
               
            }

            
            this.ShowInTaskbar = false;
        }   

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            
            this.WindowState = FormWindowState.Normal;

        }



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            string testtext = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";


            var objWriter = new System.IO.StreamWriter(testtext);

            int count = dataGridView1.Rows.Count;


            for (int row = 0; row < count; row++)
            {
                int columncount = dataGridView1.Columns.Count;
                for (int column = 0; column < columncount; column++)

                {
                    objWriter.WriteLine(dataGridView1.Rows[row].Cells[column].Value.ToString());
                }
            }
          

            objWriter.Close();

            DialogResult dialog = MessageBox.Show("Möchten Das Programm wirklich beenden?", "Programm beenden", MessageBoxButtons.YesNo);
            if (dialog == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}

**Dialogfenster" Bemerkung" 😗*



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Zeiterfassungstool

{
    
    public partial class Bemerkung : Form
    {
        // Interne Zugriff
        private string Speichern = "";
        // Externe Zugriff
        public string Form1 
        {
            get { return Form1 ; }
            
        }
        

        public Bemerkung()
        {
            InitializeComponent();
            
        }

        private void btnspeichern_Click(object sender, EventArgs e)
        {
            Speichern = textBox1.Text;

        }

        public string getBemerkung()
        {
            return textBox1.Text;
        
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

      
    }
}

**App config 😗*


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <appSettings>
    <add key="k1" value="Pfad zum Speichern angeben " />
    <add key="k2" value="v2" />
    <add key="k3" value="v3" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  
</configuration>


**Der Code in WPF:

Hauptfenster von Programm ( MainWindow.xaml:1 ) **



Window x:Class="Grid.MainWindow"
        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:Grid"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="600">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />

            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="14*"/>
            <ColumnDefinition Width="15*"/>
            <ColumnDefinition Width="15*"/>
            <ColumnDefinition Width="15*"/>
            <ColumnDefinition Width="15*"/>

        </Grid.ColumnDefinitions>
        <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
            <Button x:Name="btnStart" FontSize="16" FontWeight="Bold" 
                    Background="LightSkyBlue" Height="50" Width="100" 
                    HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,0,0,0"   
                    >Start</Button>
        </Grid>

        <Grid Grid.Row="0" Grid.Column="2">
            <Label FontSize="16" FontFamily="Century Gothic" 
                   FontStyle="Normal" FontWeight="Bold" Margin="5" Padding="5,5,5,5"
                   HorizontalAlignment="Center"> Start</Label>
        </Grid>
       
        <Grid Grid.Row="0" Grid.Column="3">
            <TextBox x:Name="textBox2" Margin="5,5,5,5" ></TextBox>
        </Grid>


        <Grid Grid.Row="0" Grid.Column="4">
            <Label FontFamily="Century Gothic" FontSize="16" FontStyle="Normal"
                   FontWeight="Bold"  Margin="5" Padding="5,5,5,5" 
                   HorizontalAlignment="Center">Ende :</Label>
        </Grid>

        <Grid Grid.Row="0" Grid.Column="5">
            <TextBox x:Name="textBox3"  Margin="5" ></TextBox>
        </Grid >

        <DataGrid
            Name="dataGridView1"
            Grid.Column="0"
            Grid.ColumnSpan="6"
            Grid.RowSpan="6"
            AutoGenerateColumns="False"
            Grid.Row="1"
           >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Start" FontSize="12" Width="125" Binding="{Binding Start}"/>
                <DataGridTextColumn Header="Ende" Width="125" Binding="{Binding Stop}"/>
                <DataGridTextColumn Header="Dauer" Width="70" Binding="{Binding Dauer}"/>
                <DataGridTextColumn Header="Bemerkung" Width="720" Binding="{Binding Bemerkung}"/>


            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Input.Manipulations;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Timereporter2;

namespace Grid
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public DateTime startTime;
        public DateTime endTime;

        public MainWindow()
        {
            InitializeComponent();
            test();
        }



        public void test()
        {
            DateTime Start = new DateTime(2020, 11, 10, 0, 0, 0);
            DateTime Stop = new DateTime(2020, 11, 10, 0, 0, 0);



            CustomDataGridRow t1 = new CustomDataGridRow(Start, Stop , 0.00 , "test");


            List<CustomDataGridRow> list = new List<CustomDataGridRow>();
            list.Add(t1);

            dataGridView1.ItemsSource = list;
            

**Dialogfenster "Bemerkung" XAML 😗*


<Window x:Class="Timereporter2.Window1"
        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:Timereporter2"
        mc:Ignorable="d"
        Title="Window1" Height="206" Width="442">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        
        <Grid Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
            <TextBox x:Name="textBox1" Width="442" ></TextBox>
        </Grid>

        <Grid Grid.Row="1" Grid.Column="0">
            <Button x:Name="btnspeichern" Margin="15,15,15,15"  
                    FontSize="16" FontFamily="Century Gothic" 
                    FontStyle="Normal" FontWeight="Bold"   >Einfügen</Button>
        </Grid>

        <Grid Grid.Row="1" Grid.Column="1">
            <Button x:Name="Abbrechen" Margin="15,15,15,15" 
                    FontSize="16" FontFamily="Century Gothic"  
                    FontStyle="Normal" FontWeight="Bold" >Abbrechen</Button>
        </Grid>
        
        
        



    </Grid>
</Window>

Dialogfenster " Bemerkung" c#:



using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Timereporter2
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class zWindow1 : Window
    {
       
        // Interne Zugriff
        private string Speichern = "";
        // Externe Zugriff
        public string MainWindow
        {
            get { return MainWindow; }

        }


        public Window1()
        {
            InitializeComponent();

        }

        private void btnspeichern_Click(object sender, EventArgs e)
        {
            Speichern = textBox1.Text;

        }

        public string getBemerkung()
        {
            return textBox1.Text;

        }
    }
}

M
MMazi Themenstarter:in
45 Beiträge seit 2020
vor 3 Jahren

Ich füge noch die weiter Bilder hinzu:

M
MMazi Themenstarter:in
45 Beiträge seit 2020
vor 3 Jahren
weitere Bilder

füge hierdurch noch einem Bild hinzu:

Ich danek euch

309 Beiträge seit 2020
vor 3 Jahren

Was erwartest du jetzt? Dass jemand deine komplette Anwendung analyisiert? 😄
Dir fehlen massiv Kenntnisse in C#-Grundlagen und WPF.
Ich würde mich erstmal da dran machen: [Artikel] MVVM und DataBinding

5.657 Beiträge seit 2006
vor 3 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig?, besonders Punkt 1.1, 4 und 5.

Das Forum ist kein kostenloser Code-Generator. Wenn du DataBinding verwenden möchtest, dann kannst du selbst nachlesen, wie es funktioniert. Siehe der von JimStark gepostete Link. Wenn du eine Frage dazu hast, dann stell die Frage und poste den dafür relevanten(!) Code-Ausschnitt.

Weeks of programming can save you hours of planning

Thema geschlossen