Header

  1. View current page

    기억연장프로젝트 Extension the Memory

Profile_image?t=1250518653&type=small
남기자...
0

가계부 v0.1

2008.12.20. 현재

요구사항.

Windows XP 이상

.net framework 2.0

.net framework 3.0

.net framework 3.5

 

프로그램 : bbon.HouseKeeping.zip

 

bbon.housekeeping.png 

 

MainForm.xaml 코드

<Window x:Class="bbon.HouseKeeping.MainForm"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="가계부" Height="538.441" Width="1000" Loaded="Window_Loaded">
    <Canvas>
      <!-- 달력 -->
      <my:Calendar Canvas.Left="12" Canvas.Top="67" Height="168" Name="calendar" Width="179" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" SelectedDatesChanged="calendar_SelectedDatesChanged" SelectionMode="SingleDate" DisplayDateChanged="calendar_DisplayDateChanged_1" />
      <!-- 버튼 -->
      <Button Name="btnOPEN" Content="데이터생성" Width="65" Height="25" Canvas.Left="197" Canvas.Top="36" Click="btnOPEN_Click" />
      <Button Canvas.Left="494" Canvas.Top="36" Height="25" Name="btnAddItem" Width="65" Click="btnAddItem_Click">추가</Button>
      <Button Name="btnEXIT" Content="끝내기" Width="65" Height="25" Canvas.Left="567" Click="btnEXIT_Click" Canvas.Top="36" />
      <Button Canvas.Left="901" Canvas.Top="459" Height="25" Name="btnSAVE" Width="65" Click="btnSAVE_Click" TabIndex="15">저장</Button>
      <Button Canvas.Left="724" Canvas.Top="459" Height="25" Name="btnDELETE" TabIndex="15" Width="65" Click="btnDELETE_Click">삭제</Button>
      <!-- 그리드 -->
      <my:DataGrid Name="grd0"
                   Canvas.Left="197"
                   Canvas.Top="67"
                   Height="417"
                   Width="435"
                   xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
                   AutoGenerateColumns="False"
                   SelectionMode="Single"
                   SelectionUnit="FullRow"
                  
                   SelectionChanged="grd0_SelectionChanged" IsReadOnly="True" CanUserResizeColumns="False" CanUserSortColumns="False" CanUserResizeRows="False">
      <my:DataGrid.Columns >
        <my:DataGridTextColumn Header="년월일" Width="80" IsReadOnly="True"  Binding="{Binding DATE}"/>
        <my:DataGridTextColumn Header="순번" Width="40" IsReadOnly="True"  Binding="{Binding SEQ}" />
        <my:DataGridTextColumn Header="금액" Width="90" IsReadOnly="True"  Binding="{Binding AMT}" />
        <my:DataGridTextColumn Header="결재방법" Width="90" IsReadOnly="True"  Binding="{Binding PAY}" />
        <my:DataGridTextColumn Header="제목" Width="90" IsReadOnly="True"  Binding="{Binding TITLE}" Visibility="Hidden" />
        <my:DataGridTextColumn Header="내용" Width="90" IsReadOnly="True"  Binding="{Binding DETAIL}" Visibility="Hidden" />
      </my:DataGrid.Columns>
    </my:DataGrid>
    <!-- 라벨 -->
    <Label Canvas.Left="638" Canvas.Top="67" Height="28" Name="label1" Width="80">년월일 :</Label>
    <Label Canvas.Left="638" Canvas.Top="101" Height="28" Name="label2" Width="80">금액 :</Label>
    <Label Canvas.Left="638" Canvas.Top="135" Height="28" Name="label3" Width="80">결재방법 :</Label>
    <Label Canvas.Left="638" Canvas.Top="169" Height="28" Name="label4" Width="80">제목 :</Label>
    <Label Canvas.Left="638" Canvas.Top="203" Height="28" Name="label5" Width="80">내용 :</Label>
    <!-- 컨트롤 -->
    <TextBox Canvas.Left="724" Canvas.Top="101" Height="28" Name="txtAMT" Width="116" Cursor="IBeam" TabIndex="11" TextAlignment="Right" AutoWordSelection="True" />
    <TextBox Canvas.Left="724" Canvas.Top="169" Height="28" Name="txtTITLE" Width="242" Cursor="IBeam" TabIndex="13" />
    <TextBox Canvas.Left="724" Canvas.Top="203" Height="250" Name="txtDETAIL" Width="242" Cursor="IBeam" AcceptsReturn="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" TabIndex="14" />
    <ComboBox Canvas.Left="724" Canvas.Top="135" Height="28" Name="cmbPAY" Width="242" TabIndex="12" />
    <my:DatePicker Canvas.Left="724" Canvas.Top="67" Height="28" Name="dteDATE" Width="116" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" TabIndex="10" />
  </Canvas>
</Window>

 

MainForm.xaml.cs 코드

using System;
using System.Collections.Generic;
using System.Linq;
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.Navigation;
using System.Windows.Shapes;

using System.IO;
using System.Data;
using System.Diagnostics;
using System.Collections;

using Microsoft.Windows.Controls;

namespace bbon.HouseKeeping
{
  /// <summary>
  /// Window1.xaml에 대한 상호 작용 논리
  /// </summary>
  public partial class MainForm : Window
  {
    #region 전역변수

    #endregion

    #region 생성자
    public MainForm()
    {
      InitializeComponent();
    }
    #endregion

    #region Window Load
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
      this.InitWindow();
    }
    #endregion

    #region Methods

    private void InitWindow()
    {
      this.cmbPAY.Items.Add("");
      this.cmbPAY.Items.Add("현금");
      this.cmbPAY.Items.Add("신용카드");
      this.LoadData();
    }

    private void LoadData()
    {
      #region 열기 버튼 클릭
      if (!File.Exists("Data.xml"))
      {
        MessageBox.Show("데이터 파일이 없습니다.", "경고", MessageBoxButton.OK, MessageBoxImage.Warning);
        return;
      }

      FileStream fs = File.Open("DATA.XML", FileMode.OpenOrCreate);
      DataTable dt=  new DataTable();
      dt.ReadXml(fs);
      Trace.Assert(dt != null, "DataSet is null!!!");
      DataView dv = dt.DefaultView;
      dv.RowFilter=string.Format("DATE ='{0}'", this.calendar.DisplayDate.ToShortDateString());
      dv.Sort = "DATE ASC, SEQ desc";
      this.grd0.ItemsSource = dv;
     
      #endregion
    }

    #endregion

    #region Events

    private void btnEXIT_Click(object sender, RoutedEventArgs e)
    {
      #region 끝내기 버튼 클릭
      try
      {
        if (File.Exists("data.xml"))
        {
          if (!Directory.Exists("Backup"))
          {
            Directory.CreateDirectory("Backup");
          }
          File.Copy("data.xml", string.Format(@"Backup\\{0}_data.xml", DateTime.Today.ToShortDateString().Replace("-", "")), true);
          File.Delete("data.xml");
        }
        FileStream fs = File.Open("data.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite);
        DataTable dt=((DataView)this.grd0.ItemsSource).Table;
        dt.TableName = "bbon";
        dt.WriteXml(fs, XmlWriteMode.WriteSchema);
        fs.Flush();
        fs.Close();
        this.Close();
      }
      catch (IOException ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      finally
      {

      }
      #endregion
    }

    private void grd0_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      #region 그리드 리스트 Row 선택
      if (this.grd0.SelectedItem == null)
      {
        this.dteDATE.Text = "";
        this.txtAMT.Text = "";
        this.cmbPAY.Text = "";
        this.txtTITLE.Text = "";
        this.txtDETAIL.Text = "";
        return;
      }
      else
      {
        DataRowView row = this.grd0.SelectedItem as DataRowView;
        this.dteDATE.Text = row["DATE"].ToString();
        this.txtAMT.Text = row["AMT"].ToString() == "0" ? "0" : string.Format("{0:C}", int.Parse(row["AMT"].ToString())).Remove(0, 1);
        this.cmbPAY.Text = row["PAY"].ToString();
        this.txtTITLE.Text = row["TITLE"].ToString();
        this.txtDETAIL.Text = row["DETAIL"].ToString();
      }
      #endregion
    }

    private void btnAddItem_Click(object sender, RoutedEventArgs e)
    {
      #region 추가버튼 클릭
      try
      {
        this.grd0.ItemsSource = ((DataView)this.grd0.ItemsSource).Table.Rows.Add(this.calendar.SelectedDate.Value.ToShortDateString(), 0, 0, "", "", "").Table.DefaultView;
        this.grd0.SelectedIndex = this.grd0.Items.Count - 1;
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      #endregion
    }

    private void btnSAVE_Click(object sender, RoutedEventArgs e)
    {
      #region 저장 버튼 클릭
      DataRowView rowView = this.grd0.SelectedItem as DataRowView;

      rowView["DATE"] = this.dteDATE.Text;
      rowView["PAY"] = this.cmbPAY.SelectedItem.ToString();
      rowView["AMT"] = Decimal.Parse(this.txtAMT.Text.Replace(",", ""));
      rowView["TITLE"] = this.txtTITLE.Text;
      rowView["DETAIL"] = this.txtDETAIL.Text;
      int t = 0;
      foreach (object obj in this.grd0.Items)
      {
        DataRowView r = obj as DataRowView;
        if (r["DATE"].ToString() == this.dteDATE.Text)
        {
          t++;
        }
      }
      rowView["SEQ"] = t + 1;
      #endregion
    }

    private void calendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
    {
      #region 날짜선택
      try
      {
        if (((Calendar)(sender)).DisplayMode == CalendarMode.Month)
        {
          ((DataView)(this.grd0.ItemsSource)).RowFilter = string.Format("DATE like '{0}%'", ((Calendar)(sender)).SelectedDate.Value.ToShortDateString());
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      #endregion
    }

    private void calendar_DisplayDateChanged_1(object sender, CalendarDateChangedEventArgs e)
    {
      #region 달력날짜 선택
      try
      {
        if (((Calendar)(sender)).DisplayMode == CalendarMode.Year)
        {
          ((DataView)(this.grd0.ItemsSource)).RowFilter = string.Format("DATE like '{0}-{1}%'", ((Calendar)(sender)).DisplayDate.Year, ((Calendar)(sender)).DisplayDate.Month);
        }
        else
        {
          ((DataView)(this.grd0.ItemsSource)).RowFilter = string.Format("DATE like '{0}%'", ((Calendar)(sender)).DisplayDate.ToShortDateString());
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      #endregion
    }

    private void btnDELETE_Click(object sender, RoutedEventArgs e)
    {
      #region 삭제 버튼 클릭
      if (MessageBoxResult.Yes != MessageBox.Show("선택된 항목을 삭제하시겠습니까?", "삭제", MessageBoxButton.YesNo, MessageBoxImage.Question))
        return;
      try
      {
        ((DataRowView)this.grd0.SelectedItem).Delete();
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      #endregion
    }

    private void btnOPEN_Click(object sender, RoutedEventArgs e)
    {
      #region 데이터를 생성한다.
      try
      {
        DataTable dt = new DataTable();
        dt.Columns.Add("DATE", typeof(string));
        dt.Columns.Add("SEQ", typeof(int));
        dt.Columns.Add("AMT", typeof(decimal));
        dt.Columns.Add("PAY", typeof(string));
        dt.Columns.Add("TITLE", typeof(string));
        dt.Columns.Add("DETAIL", typeof(string));
        DataView dv = dt.DefaultView;
        dv.RowFilter = string.Format("DATE='{0}'", this.calendar.DisplayDate.ToShortDateString());
        dv.Sort = "DATE ASC, SEQ desc";
        this.grd0.ItemsSource = dv;
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "오류");
      }
      #endregion
    }

    #endregion
  }
}

History

Last edited on 12/20/2008 21:11 by bbon