/// <summary>
        ///   <para>Retrieve the item information from the database and
        ///         display it within the tree, ordered by category,
        ///         sub category, and item name.</para>
        /// </summary>
        private void loadData()
        {
            Cursor = Cursors.WaitCursor;

            TreeNode categoryNode    = null;
            TreeNode subCategoryNode = null;

            Items.ItemCategory    itemCategory;
            Items.ItemSubCategory itemSubCategory;
            String categoryId;
            String subCategoryId;

            TreeNode dummyNode = createDummyNode();

            treeItems.SuspendLayout();
            treeItems.Nodes.Clear();

            CodeValue[] categories = Database.Database.getItemCategories();
            CodeValue[] subCategories;

            foreach (CodeValue category in categories)
            {
                categoryId        = category.code.ToString();
                categoryNode      = new TreeNode();
                itemCategory      = (Items.ItemCategory)Enum.Parse(typeof(Items.ItemCategory), categoryId, true);
                categoryNode.Name = categoryId;
                categoryNode.Text = Items.CategoryLookup(itemCategory) + " (" + categoryId + ")";
                categoryNode.Tag  = new ItemNodeInfo(categoryId, "", "", false);
                treeItems.Nodes.Add(categoryNode);

                subCategories = Database.Database.getItemSubCategories(category.code);
                foreach (CodeValue subCategory in subCategories)
                {
                    subCategoryId        = subCategory.code.ToString();
                    subCategoryNode      = new TreeNode();
                    itemSubCategory      = (Items.ItemSubCategory)Enum.Parse(typeof(Items.ItemSubCategory), subCategoryId, true);
                    subCategoryNode.Name = subCategoryId;
                    subCategoryNode.Text = Items.SubCategoryLookup(itemSubCategory) + " (" + subCategoryId + ")";
                    subCategoryNode.Tag  = new ItemNodeInfo(categoryId, subCategoryId, "", false);
                    categoryNode.Nodes.Add(subCategoryNode);
                    subCategoryNode.Nodes.Add((TreeNode)dummyNode.Clone());
                }
            }

            treeItems.ResumeLayout(false);
            Cursor = Cursors.Default;
        }
        private void btnSearch_Click(object sender, EventArgs e)
        {
            String        query         = "";
            String        filter        = "";
            List <String> sqlParameters = new List <String>();
            List <String> sqlValues     = new List <String>();
            int           parameterId   = 0;

            foreach (SearchCriteria searchCriteria in searchSearchCriteriaLst.Items)
            {
                if (filter.Length != 0)
                {
                    filter += " AND ";
                }
                filter += searchCriteria.getQuery() + parameterId.ToString();
                sqlParameters.Add(searchCriteria.sqlParameter + parameterId.ToString());
                sqlValues.Add(searchCriteria.sqlValue);
                parameterId++;
            }

            if (filter.Length != 0)
            {
                searchResultList.Items.Clear();
                query = "SELECT "
                        + ColumnData.GetName(Net7.Table_item_base._id) + ","
                        + ColumnData.GetName(Net7.Table_item_base._name) + ","
                        + ColumnData.GetName(Net7.Table_item_base._category) + ","
                        + ColumnData.GetName(Net7.Table_item_base._sub_category) + ","
                        + ColumnData.GetName(Net7.Table_item_base._level) + ","
                        + ColumnData.GetName(Net7.Table_item_base._status)
                        + " FROM "
                        + Net7.Tables.item_base;
                if (m_table.Equals(Net7.Tables.item_base))
                {
                    query += DB.WHERE;
                }
                else
                {
                    query += "," + m_table
                             + DB.WHERE
                             + ColumnData.GetName(Net7.Table_item_base._id)
                             + DB.EQUALS
                             + m_primaryId
                             + " AND ";
                }
                query += filter;
                DataTable dataTable = DB.Instance.executeQuery(query, sqlParameters.ToArray(), sqlValues.ToArray());
                searchResultCount.Text = dataTable.Rows.Count.ToString() + " items";
                ListViewItem          listViewItem;
                Int32                 code;
                Items.ItemCategory    categoryValue;
                String                category;
                Items.ItemSubCategory subCategoryValue;
                String                subCategory;
                foreach (DataRow dataRow in dataTable.Rows)
                {
                    code             = ColumnData.GetInt32(dataRow, Net7.Table_item_base._category);
                    categoryValue    = (Items.ItemCategory)code;
                    category         = Items.CategoryLookup(categoryValue);
                    code             = ColumnData.GetInt32(dataRow, Net7.Table_item_base._sub_category);
                    subCategoryValue = (Items.ItemSubCategory)code;
                    subCategory      = Items.SubCategoryLookup(subCategoryValue);
                    listViewItem     = new ListViewItem(new String[]
                    {
                        ColumnData.GetString(dataRow, Net7.Table_item_base._id),
                        ColumnData.GetString(dataRow, Net7.Table_item_base._name),
                        category,
                        subCategory,
                        ColumnData.GetString(dataRow, Net7.Table_item_base._level),
                        ColumnData.GetString(dataRow, Net7.Table_item_base._status)
                    });
                    searchResultList.Items.Add(listViewItem);
                }
            }
        }