Click here to Skip to main content
15,886,864 members
Articles / Desktop Programming / Windows Forms

Hierarchical TreeView Control with Data Binding Enabled

Rate me:
Please Sign up or sign in to vote.
4.46/5 (17 votes)
27 Mar 2005CPOL3 min read 278.6K   6.9K   82  
The control extends standard TreeView control to make it fully data bind.
//------------------------------------------------------------------------------
// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.1.4322.573
//
//     Changes to this file may cause incorrect behavior and will be lost if 
//     the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------

namespace Test {
    using System;
    using System.Data;
    using System.Xml;
    using System.Runtime.Serialization;
    
    
    [Serializable()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Diagnostics.DebuggerStepThrough()]
    [System.ComponentModel.ToolboxItem(true)]
    public class ApplicationData : DataSet {
        
        private TestDataTable tableTest;
        
        public ApplicationData() {
            this.InitClass();
            System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
            this.Tables.CollectionChanged += schemaChangedHandler;
            this.Relations.CollectionChanged += schemaChangedHandler;
        }
        
        protected ApplicationData(SerializationInfo info, StreamingContext context) {
            string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string))));
            if ((strSchema != null)) {
                DataSet ds = new DataSet();
                ds.ReadXmlSchema(new XmlTextReader(new System.IO.StringReader(strSchema)));
                if ((ds.Tables["Test"] != null)) {
                    this.Tables.Add(new TestDataTable(ds.Tables["Test"]));
                }
                this.DataSetName = ds.DataSetName;
                this.Prefix = ds.Prefix;
                this.Namespace = ds.Namespace;
                this.Locale = ds.Locale;
                this.CaseSensitive = ds.CaseSensitive;
                this.EnforceConstraints = ds.EnforceConstraints;
                this.Merge(ds, false, System.Data.MissingSchemaAction.Add);
                this.InitVars();
            }
            else {
                this.InitClass();
            }
            this.GetSerializationData(info, context);
            System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
            this.Tables.CollectionChanged += schemaChangedHandler;
            this.Relations.CollectionChanged += schemaChangedHandler;
        }
        
        [System.ComponentModel.Browsable(false)]
        [System.ComponentModel.DesignerSerializationVisibilityAttribute(System.ComponentModel.DesignerSerializationVisibility.Content)]
        public TestDataTable Test {
            get {
                return this.tableTest;
            }
        }
        
        public override DataSet Clone() {
            ApplicationData cln = ((ApplicationData)(base.Clone()));
            cln.InitVars();
            return cln;
        }
        
        protected override bool ShouldSerializeTables() {
            return false;
        }
        
        protected override bool ShouldSerializeRelations() {
            return false;
        }
        
        protected override void ReadXmlSerializable(XmlReader reader) {
            this.Reset();
            DataSet ds = new DataSet();
            ds.ReadXml(reader);
            if ((ds.Tables["Test"] != null)) {
                this.Tables.Add(new TestDataTable(ds.Tables["Test"]));
            }
            this.DataSetName = ds.DataSetName;
            this.Prefix = ds.Prefix;
            this.Namespace = ds.Namespace;
            this.Locale = ds.Locale;
            this.CaseSensitive = ds.CaseSensitive;
            this.EnforceConstraints = ds.EnforceConstraints;
            this.Merge(ds, false, System.Data.MissingSchemaAction.Add);
            this.InitVars();
        }
        
        protected override System.Xml.Schema.XmlSchema GetSchemaSerializable() {
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            this.WriteXmlSchema(new XmlTextWriter(stream, null));
            stream.Position = 0;
            return System.Xml.Schema.XmlSchema.Read(new XmlTextReader(stream), null);
        }
        
        internal void InitVars() {
            this.tableTest = ((TestDataTable)(this.Tables["Test"]));
            if ((this.tableTest != null)) {
                this.tableTest.InitVars();
            }
        }
        
        private void InitClass() {
            this.DataSetName = "ApplicationData";
            this.Prefix = "";
            this.Namespace = "http://tempuri.org/ApplicationData.xsd";
            this.Locale = new System.Globalization.CultureInfo("en-US");
            this.CaseSensitive = false;
            this.EnforceConstraints = true;
            this.tableTest = new TestDataTable();
            this.Tables.Add(this.tableTest);
        }
        
        private bool ShouldSerializeTest() {
            return false;
        }
        
        private void SchemaChanged(object sender, System.ComponentModel.CollectionChangeEventArgs e) {
            if ((e.Action == System.ComponentModel.CollectionChangeAction.Remove)) {
                this.InitVars();
            }
        }
        
        public delegate void TestRowChangeEventHandler(object sender, TestRowChangeEvent e);
        
        [System.Diagnostics.DebuggerStepThrough()]
        public class TestDataTable : DataTable, System.Collections.IEnumerable {
            
            private DataColumn columnID;
            
            private DataColumn columnName;
            
            private DataColumn columnParentID;
            
            internal TestDataTable() : 
                    base("Test") {
                this.InitClass();
            }
            
            internal TestDataTable(DataTable table) : 
                    base(table.TableName) {
                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
                    this.CaseSensitive = table.CaseSensitive;
                }
                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
                    this.Locale = table.Locale;
                }
                if ((table.Namespace != table.DataSet.Namespace)) {
                    this.Namespace = table.Namespace;
                }
                this.Prefix = table.Prefix;
                this.MinimumCapacity = table.MinimumCapacity;
                this.DisplayExpression = table.DisplayExpression;
            }
            
            [System.ComponentModel.Browsable(false)]
            public int Count {
                get {
                    return this.Rows.Count;
                }
            }
            
            internal DataColumn IDColumn {
                get {
                    return this.columnID;
                }
            }
            
            internal DataColumn NameColumn {
                get {
                    return this.columnName;
                }
            }
            
            internal DataColumn ParentIDColumn {
                get {
                    return this.columnParentID;
                }
            }
            
            public TestRow this[int index] {
                get {
                    return ((TestRow)(this.Rows[index]));
                }
            }
            
            public event TestRowChangeEventHandler TestRowChanged;
            
            public event TestRowChangeEventHandler TestRowChanging;
            
            public event TestRowChangeEventHandler TestRowDeleted;
            
            public event TestRowChangeEventHandler TestRowDeleting;
            
            public void AddTestRow(TestRow row) {
                this.Rows.Add(row);
            }
            
            public TestRow AddTestRow(string ID, string Name, string ParentID) {
                TestRow rowTestRow = ((TestRow)(this.NewRow()));
                rowTestRow.ItemArray = new object[] {
                        ID,
                        Name,
                        ParentID};
                this.Rows.Add(rowTestRow);
                return rowTestRow;
            }
            
            public System.Collections.IEnumerator GetEnumerator() {
                return this.Rows.GetEnumerator();
            }
            
            public override DataTable Clone() {
                TestDataTable cln = ((TestDataTable)(base.Clone()));
                cln.InitVars();
                return cln;
            }
            
            protected override DataTable CreateInstance() {
                return new TestDataTable();
            }
            
            internal void InitVars() {
                this.columnID = this.Columns["ID"];
                this.columnName = this.Columns["Name"];
                this.columnParentID = this.Columns["ParentID"];
            }
            
            private void InitClass() {
                this.columnID = new DataColumn("ID", typeof(string), null, System.Data.MappingType.Element);
                this.Columns.Add(this.columnID);
                this.columnName = new DataColumn("Name", typeof(string), null, System.Data.MappingType.Element);
                this.Columns.Add(this.columnName);
                this.columnParentID = new DataColumn("ParentID", typeof(string), null, System.Data.MappingType.Element);
                this.Columns.Add(this.columnParentID);
            }
            
            public TestRow NewTestRow() {
                return ((TestRow)(this.NewRow()));
            }
            
            protected override DataRow NewRowFromBuilder(DataRowBuilder builder) {
                return new TestRow(builder);
            }
            
            protected override System.Type GetRowType() {
                return typeof(TestRow);
            }
            
            protected override void OnRowChanged(DataRowChangeEventArgs e) {
                base.OnRowChanged(e);
                if ((this.TestRowChanged != null)) {
                    this.TestRowChanged(this, new TestRowChangeEvent(((TestRow)(e.Row)), e.Action));
                }
            }
            
            protected override void OnRowChanging(DataRowChangeEventArgs e) {
                base.OnRowChanging(e);
                if ((this.TestRowChanging != null)) {
                    this.TestRowChanging(this, new TestRowChangeEvent(((TestRow)(e.Row)), e.Action));
                }
            }
            
            protected override void OnRowDeleted(DataRowChangeEventArgs e) {
                base.OnRowDeleted(e);
                if ((this.TestRowDeleted != null)) {
                    this.TestRowDeleted(this, new TestRowChangeEvent(((TestRow)(e.Row)), e.Action));
                }
            }
            
            protected override void OnRowDeleting(DataRowChangeEventArgs e) {
                base.OnRowDeleting(e);
                if ((this.TestRowDeleting != null)) {
                    this.TestRowDeleting(this, new TestRowChangeEvent(((TestRow)(e.Row)), e.Action));
                }
            }
            
            public void RemoveTestRow(TestRow row) {
                this.Rows.Remove(row);
            }
        }
        
        [System.Diagnostics.DebuggerStepThrough()]
        public class TestRow : DataRow {
            
            private TestDataTable tableTest;
            
            internal TestRow(DataRowBuilder rb) : 
                    base(rb) {
                this.tableTest = ((TestDataTable)(this.Table));
            }
            
            public string ID {
                get {
                    try {
                        return ((string)(this[this.tableTest.IDColumn]));
                    }
                    catch (InvalidCastException e) {
                        throw new StrongTypingException("Cannot get value because it is DBNull.", e);
                    }
                }
                set {
                    this[this.tableTest.IDColumn] = value;
                }
            }
            
            public string Name {
                get {
                    try {
                        return ((string)(this[this.tableTest.NameColumn]));
                    }
                    catch (InvalidCastException e) {
                        throw new StrongTypingException("Cannot get value because it is DBNull.", e);
                    }
                }
                set {
                    this[this.tableTest.NameColumn] = value;
                }
            }
            
            public string ParentID {
                get {
                    try {
                        return ((string)(this[this.tableTest.ParentIDColumn]));
                    }
                    catch (InvalidCastException e) {
                        throw new StrongTypingException("Cannot get value because it is DBNull.", e);
                    }
                }
                set {
                    this[this.tableTest.ParentIDColumn] = value;
                }
            }
            
            public bool IsIDNull() {
                return this.IsNull(this.tableTest.IDColumn);
            }
            
            public void SetIDNull() {
                this[this.tableTest.IDColumn] = System.Convert.DBNull;
            }
            
            public bool IsNameNull() {
                return this.IsNull(this.tableTest.NameColumn);
            }
            
            public void SetNameNull() {
                this[this.tableTest.NameColumn] = System.Convert.DBNull;
            }
            
            public bool IsParentIDNull() {
                return this.IsNull(this.tableTest.ParentIDColumn);
            }
            
            public void SetParentIDNull() {
                this[this.tableTest.ParentIDColumn] = System.Convert.DBNull;
            }
        }
        
        [System.Diagnostics.DebuggerStepThrough()]
        public class TestRowChangeEvent : EventArgs {
            
            private TestRow eventRow;
            
            private DataRowAction eventAction;
            
            public TestRowChangeEvent(TestRow row, DataRowAction action) {
                this.eventRow = row;
                this.eventAction = action;
            }
            
            public TestRow Row {
                get {
                    return this.eventRow;
                }
            }
            
            public DataRowAction Action {
                get {
                    return this.eventAction;
                }
            }
        }
    }
}

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
Web Developer
Ukraine Ukraine

Comments and Discussions