Click here to Skip to main content
15,893,668 members
Articles / Programming Languages / XML

Create Data Classes

Rate me:
Please Sign up or sign in to vote.
4.88/5 (31 votes)
4 Mar 2011CPOL10 min read 135.8K   2.5K   167  
An application that creates a C# class to read/write data to/from an Access, SQLite, or XML database.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using JGBaseForm;

/*
 * Copyright Jeff Gaines 2007 - 2011 (jeff@jgaines.co.uk)
 * Free licence for private use
 * Please contact the author if you wish to use the code commercially
*/

namespace JGCreateDataClasses
{
	internal partial class JSavedProjectsPanel : UserControl
	{
		private ToolTip m_ToolTip = new ToolTip();

		internal delegate void LoadProjectEventHandler(object sender, int recordNumber);
		internal event LoadProjectEventHandler LoadProject;
		protected virtual void OnLoadProject(object sender, int recordNumber)
		{
			LoadProjectEventHandler handler = LoadProject;
			if (handler != null)
				handler(sender, recordNumber);
		}

		private void RaiseLoadProjectEventHandler(int recordNumber)
		{
			OnLoadProject(this, recordNumber);
		}

		internal event EventHandler<JMessageArgs> MessageRaised;
		protected virtual void OnMessageRaised(object sender, JMessageArgs e)
		{
			EventHandler<JMessageArgs> handler = MessageRaised;
			if (handler != null)
				handler(sender, e);
		}

		internal void RaiseMessageEvent(object sender, string message, bool beep)
		{
			JMessageArgs e = new JMessageArgs(message, beep);
			OnMessageRaised(sender, e);
		}

		internal JSavedProjectsPanel()
		{
			InitializeComponent();
			if (!this.DesignMode)
				ControlInitialise();
		}

		private void ControlInitialise()
		{
			ClearForm();

			if (!String.IsNullOrEmpty(JCommon.DatabasePath))
				FillSavedProjectsListBox();
		}

		private void ClearForm()
		{
			lblProjectName.Text = "";
			lblClassNameSpace.Text = "";
			lblDataType.Text = "";
			lblDBPath.Text = "";
			m_ToolTip.SetToolTip(lblDBPath, "");
			lblTableName.Text = "";

			tslblRecNum.Text = "0";
			tslblLastUpdated.Text = "";

			lstFieldNames.Items.Clear();
		}

		private int CurrentRecordNumber
		{
			get
			{
				try
				{
					return Convert.ToInt32(tslblRecNum.Text);
				}
				catch
				{
					return 0;
				}
			}
		}

		private bool DeleteProjectRecord()
		{
			bool result = true;
			int recNum = CurrentRecordNumber;
			if (recNum == -1)
			{
				RaiseMessageEvent(this, "No Project Selected To Delete", true);
				return false;
			}

			JSavedProject savedPD = new JSavedProject(recNum);

			DialogResult dr = JCommon.GetDialogResult("Confirm Deletion of " + savedPD.ClassName + "?", "Delete Project Record", MessageBoxButtons.YesNo);

			if (dr != DialogResult.Yes)
				return false;

			//	Delete the JFieldsData records

			JFieldsDataFunctions.DeleteRecordsForParent(savedPD.RecordNumber);

			if (JSavedProjectUpdater.DeleteRecord(savedPD))
			{
				RaiseMessageEvent(this, "Record Deleted", false);
				ClearForm();
				FillSavedProjectsListBox();
				result = true;
			}
			else
			{
				RaiseMessageEvent(this, "Unable To Delete Record", true);
				result = false;
			}
			return result;
		}

		private void FillSavedProjectsListBox()
		{
			lstSavedProjects.Items.Clear();

			List<JSavedProject.JSavedProjectIndexData> listSaved = JSavedProjectUpdater.AllIndexData();
			if (listSaved != null && listSaved.Count > 0)
			{
				foreach (JSavedProject.JSavedProjectIndexData current in listSaved)
					lstSavedProjects.Items.Add(current);
			}
		}

		//	Converts the JSavedProject.FieldsDataList into ListViewItems
		private void FillListBoxWithClassFields(JSavedProject savedPD)
		{
			lstFieldNames.Items.Clear();

			List<JFieldsData> listFields = savedPD.FieldsDataList;

			foreach (JFieldsData current in listFields)
			{
				lstFieldNames.Items.Add(current.PublicName);
			}
		}
			
		private void lstSavedProjects_SelectedIndexChanged(object sender, EventArgs e)
		{
			if (lstSavedProjects.SelectedItems.Count != 1)
			{
				tsbtnLoad.Enabled = false;
				tsbtnDelete.Enabled = false;
				return;
			}

			JSavedProject.JSavedProjectIndexData indexData = (JSavedProject.JSavedProjectIndexData)lstSavedProjects.SelectedItems[0];
			JSavedProject savedPD = new JSavedProject(indexData.RecordNumber);
			ShowRecord(savedPD);
		}

		internal void RefreshList()
		{
			tsbtnRefreshList.PerformClick();
		}

		private void ShowRecord(JSavedProject savedPD)
		{
			tslblRecNum.Text = savedPD.RecordNumber.ToString();
			tslblLastUpdated.Text = savedPD.LastUpdated;

			lblProjectName.Text = savedPD.ClassName;
			lblClassNameSpace.Text = savedPD.ClassNameSpace;
			lblDataType.Text = ((JCommon.ClassDataTypes)savedPD.ClassDataSource).ToString();

			switch (savedPD.ClassDataSource)
			{
				case JCommon.ClassDataTypes.ADODB:
				case JCommon.ClassDataTypes.ADONET:
					lblDBPath.Text = savedPD.AccessDatabasePath;
					m_ToolTip.SetToolTip(lblDBPath, savedPD.AccessDatabasePath);
					lblTableName.Text = savedPD.AccessTableName;
					break;

				case JCommon.ClassDataTypes.SQLITE:
					lblDBPath.Text = savedPD.SQLiteDatabasePath;
					m_ToolTip.SetToolTip(lblDBPath, savedPD.SQLiteDatabasePath);
					lblTableName.Text = savedPD.SQLiteTableName;
					break;

				case JCommon.ClassDataTypes.XML:
					lblDBPath.Text = savedPD.XMLDatabasePath;
					m_ToolTip.SetToolTip(lblDBPath, savedPD.XMLDatabasePath);
					lblTableName.Text = savedPD.XMLTableName;
					break;
			}
			
			FillListBoxWithClassFields(savedPD);

			tsbtnLoad.Enabled = true;
			tsbtnDelete.Enabled = true;
		}

		private void tsbtnDelete_Click(object sender, EventArgs e)
		{
			DeleteProjectRecord();
		}

		private void tsbtnLoad_Click(object sender, EventArgs e)
		{
			if (lstSavedProjects.SelectedItems.Count != 1)
				return;

			JSavedProject.JSavedProjectIndexData indexData = (JSavedProject.JSavedProjectIndexData)lstSavedProjects.SelectedItems[0];
			RaiseLoadProjectEventHandler(indexData.RecordNumber);
		}

		private void tsbtnRefreshList_Click(object sender, EventArgs e)
		{
			ClearForm();
			FillSavedProjectsListBox();
		}

	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Retired
United Kingdom United Kingdom
I have been a keen hobbyist programmer since getting my first computer - a Vic 20 (you had to be able to write programs then since few programs were available and all were expensive).
Retired and now living in Pewsey, Wiltshire, where I spend (far too much of) my time writing computer programs to keep my mind active.

Comments and Discussions