using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Xml; namespace _314_XML_Example { public partial class FormMain : Form { private DataSet ds; //-------------------------------------------------------------------------- public FormMain() { InitializeComponent(); } //-------------------------------------------------------------------------- private void numericUpDown1_ValueChanged(object sender, EventArgs e) { CalculateMileageExpense(); } //-------------------------------------------------------------------------- private void textBoxMilesDriven_TextChanged(object sender, EventArgs e) { CalculateMileageExpense(); } //-------------------------------------------------------------------------- private void CalculateMileageExpense() { try { labelMileageExpense.Text = (numericUpDownMileageRate.Value * Decimal.Parse(textBoxMilesDriven.Text)).ToString(); } catch { labelMileageExpense.Text = "$0.00"; } } //-------------------------------------------------------------------------- private void textBoxBreakfast_TextChanged(object sender, EventArgs e) { CalculateMealsExpense(); } //-------------------------------------------------------------------------- private void CalculateMealsExpense() { double mb, ml, md; try { mb = Math.Max(0.0, Math.Min(5.0, Double.Parse(textBoxBreakfast.Text))); } catch { mb = 0.0; } try { ml = Math.Max(0.0, Math.Min(10.0, Double.Parse(textBoxLunch.Text))); } catch { ml = 0.0; } try { md = Math.Max(0.0, Math.Min(15.0, Double.Parse(textBoxDinner.Text))); } catch { md = 0.0; } labelMealsExpense.Text = String.Format("{0:c}", (mb + ml + md).ToString()); } //-------------------------------------------------------------------------- private void textBoxMoviesPhone_TextChanged(object sender, EventArgs e) { CalculateLodgingExpense(); } //-------------------------------------------------------------------------- private void CalculateLodgingExpense() { double rr, rmp; try { rr = Double.Parse(textBoxRoomRate.Text); } catch { rr = 0.0; } try { rmp = Double.Parse(textBoxMoviesPhone.Text); } catch { rmp = 0.0; } labelLodgingExpense.Text = String.Format("{0:c}", (rr + rmp).ToString()); } //-------------------------------------------------------------------------- private void RecalculateDailyTotal(object sender, EventArgs e) { double le, fe, me; try { le = Double.Parse(labelLodgingExpense.Text); } catch { le = 0.0; } try { fe = Double.Parse(labelMealsExpense.Text); } catch { fe = 0.0; } try { me = Double.Parse(labelMileageExpense.Text); } catch { me = 0.0; } labelTotal.Text = String.Format("{0:c}", (le + fe + me).ToString()); } //-------------------------------------------------------------------------- private void DisplayDS() { Console.WriteLine("********************** STATE OF DATASET ************************"); foreach (DataTable dt in ds.Tables) { Console.WriteLine(); Console.WriteLine("Table: " + dt.TableName); Console.WriteLine("------------------------------------------------------"); foreach (DataColumn dc in dt.Columns) Console.Write("{0, -15}", dc.ColumnName); Console.WriteLine(); Console.WriteLine("------------------------------------------------------"); foreach (DataRow dr in dt.Rows) { // Console.WriteLine(" Row: " + dr.ToString()); foreach (Object o in dr.ItemArray) { Console.Write("{0, -15}", o.ToString()); } Console.WriteLine(); } } Console.WriteLine("***************************************************************"); } //-------------------------------------------------------------------------- private string GetNewID() { int new_id = 0; int id; foreach (DataRow dr in ds.Tables["DAY"].Rows) { id = Int32.Parse(dr["DAY_id"].ToString()); if (id > new_id) new_id = id; } new_id++; return new_id.ToString(); } //-------------------------------------------------------------------------- private void InsertNewRow(string ssd) { DataRow dr; string id = GetNewID(); dr = ds.Tables["DAY"].NewRow(); dr["DAY_id"] = id; dr["date"] = ssd; ds.Tables["DAY"].Rows.Add(dr); dr = ds.Tables["meals"].NewRow(); dr["breakfast"] = textBoxBreakfast.Text; dr["lunch"] = textBoxLunch.Text; dr["dinner"] = textBoxDinner.Text; dr["DAY_id"] = id; ds.Tables["meals"].Rows.Add(dr); dr = ds.Tables["travel"].NewRow(); dr["rate"] = numericUpDownMileageRate.Value.ToString(); dr["miles"] = textBoxMilesDriven.Text; dr["DAY_id"] = id; ds.Tables["travel"].Rows.Add(dr); dr = ds.Tables["lodging"].NewRow(); dr["rate"] = textBoxRoomRate.Text; dr["phone_movies"] = textBoxMoviesPhone.Text; dr["DAY_id"] = id; ds.Tables["lodging"].Rows.Add(dr); } //-------------------------------------------------------------------------- private void UpdateRow(string d_id) { DataRow[] drs; drs = ds.Tables["meals"].Select("DAY_id = '" + d_id + "'"); drs[0]["breakfast"] = textBoxBreakfast.Text; drs[0]["lunch"] = textBoxLunch.Text; drs[0]["dinner"] = textBoxDinner.Text; drs = ds.Tables["travel"].Select("DAY_id = '" + d_id + "'"); drs[0]["rate"] = numericUpDownMileageRate.Value.ToString(); drs[0]["miles"] = textBoxMilesDriven.Text; drs = ds.Tables["lodging"].Select("DAY_id = '" + d_id + "'"); drs[0]["rate"] = textBoxRoomRate.Text; drs[0]["phone_movies"] = textBoxMoviesPhone.Text; } //-------------------------------------------------------------------------- private void buttonSave_Click(object sender, EventArgs e) { DateTime selected_date = dateTimePicker1.Value; string ssd = selected_date.ToShortDateString(); DataRow[] drs = ds.Tables["DAY"].Select("date = '" + ssd + "'"); if (drs.Length == 0) InsertNewRow(ssd); else { string d_id = drs[0][0].ToString(); UpdateRow(d_id); } DisplayDS(); ds.WriteXml("sample.xml"); } //-------------------------------------------------------------------------- private void FormMain_Load(object sender, EventArgs e) { ds = new DataSet(); ds.ReadXml("sample.xml"); } //-------------------------------------------------------------------------- private void ClearData() { textBoxBreakfast.Text = ""; textBoxLunch.Text = ""; textBoxDinner.Text = ""; textBoxRoomRate.Text = ""; textBoxMoviesPhone.Text = ""; textBoxMilesDriven.Text = ""; numericUpDownMileageRate.Value = 0.42M; } //-------------------------------------------------------------------------- private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { DateTime selected_date = dateTimePicker1.Value; string ssd = selected_date.ToShortDateString(); DataRow[] drs = ds.Tables["DAY"].Select("date = '" + ssd + "'"); if (drs.Length == 0) { ClearData(); return; } string d_id = drs[0][0].ToString(); drs = ds.Tables["meals"].Select("DAY_id = '" + d_id + "'"); if (drs.Length == 0) { ClearData(); return; } textBoxBreakfast.Text = drs[0]["breakfast"].ToString(); textBoxLunch.Text = drs[0]["lunch"].ToString(); textBoxDinner.Text = drs[0]["dinner"].ToString(); drs = ds.Tables["lodging"].Select("DAY_id = '" + d_id + "'"); if (drs.Length == 0) { ClearData(); return; } textBoxRoomRate.Text = drs[0]["rate"].ToString(); textBoxMoviesPhone.Text = drs[0]["phone_movies"].ToString(); drs = ds.Tables["travel"].Select("DAY_id = '" + d_id + "'"); if (drs.Length == 0) { ClearData(); return; } textBoxMilesDriven.Text = drs[0]["miles"].ToString(); numericUpDownMileageRate.Value = Decimal.Parse(drs[0]["rate"].ToString()); } //-------------------------------------------------------------------------- } }