가계부 v0.1
2008.12.20. 현재
요구사항.
Windows XP 이상
.net framework 2.0
.net framework 3.0
.net framework 3.5
프로그램 : bbon.HouseKeeping.zip
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