//private void RegisterDataTableOnRowChanging(object sender, DataRowChangeEventArgs e)
        //{

        //}

        //private void CustomerDataTableOnRowChanged(object sender, DataRowChangeEventArgs dataRowChangeEventArgs)
        //{
        //    if (dataRowChangeEventArgs.Action == DataRowAction.Commit && !string.IsNullOrEmpty(_errorText))
        //    {
        //        DataRow row = Tables.ErrorDataTable.NewRow();
        //        row[0] = dataRowChangeEventArgs.Row[0];
        //        row[1] = _errorText;
        //        Tables.ErrorDataTable.Rows.Add(row);

        //    }
        //    _errorText = String.Empty;
        //}

        //private void CustomerDataTableOnRowChanging(object sender, DataRowChangeEventArgs dataRowChangeEventArgs)
        //{
        //    if (Utilites.ValidateTextInputNotName(dataRowChangeEventArgs.Row["LastName"].ToString()))
        //    {
        //        //throw new ArgumentException("Not correct input valut","LastName");
        //        Debug.Write("BAL: Not correct input value", "LastName" + dataRowChangeEventArgs.Row["LastName"]);
        //        Debug.WriteLine(dataRowChangeEventArgs.Row[0]);
        //        _errorText += "Фамлия содержит некорректные символы. " + dataRowChangeEventArgs.Row["LastName"];
        //    }
        //    DateTime birthday;
        //    if (DateTime.TryParse(dataRowChangeEventArgs.Row["Birthday"].ToString(), out birthday))
        //    {
        //        if (birthday > _maxDateTime)
        //        {
        //            //throw new ArgumentException("Not correct date time", "Birthday");
        //            Debug.WriteLine("Not correct date time", "Birthday");
        //            _errorText += "\nНекорректная дата в поле День рождения. " + dataRowChangeEventArgs.Row["Birthday"];
        //        }
        //    }
        //}

        public object QueryData <T>(NewCriteria <T> newCriteria) where T : IComparable <T>
        {
            Query <T> query;

            query = new CustomerQuery <T>();
            query.Criterias(newCriteria);
            return(query.Execute());
        }
        public void Query_CustomerQuery_ExecuteMethod_TestMethod()
        {
            SqlConnection connection = ConnectionManager.Connection;

            connection.Open();
            CustomerAccess.FillDictionary();
            DataSet             dataSet;
            NewCriteria <int>   criteria      = new NewCriteria <int>("=", "ID", 1);
            CustomerQuery <int> customerQuery = new CustomerQuery <int>();

            customerQuery.Criterias(criteria);
            dataSet = (DataSet)customerQuery.Execute();
            Assert.IsTrue(dataSet.Tables["Customer"].Rows.Count > 0);
        }
        public void Query_GlossaryQuery_ExecuteMethod_TestMethod(string nameGlossary, int id)
        {
            SqlConnection connection = ConnectionManager.Connection;

            connection.Open();
            CustomerAccess.FillDictionary();
            CustomerAccess.FillCustomerData();
            DataSet           dataSet  = (DataSet)CustomerAccess.GetData();
            NewCriteria <int> criteria = new NewCriteria <int>("=", nameGlossary, id);
            GlossaryQuery     glossary = new GlossaryQuery();

            glossary.Criterias(criteria);
            dataSet = (DataSet)glossary.Execute();
            Assert.IsTrue(dataSet.Tables["Customer"].Rows.Count > 0);
        }
        public object FindByID(int id)
        {
            NewCriteria <int> criteria = NewCriteria <int> .CreateCriteria("=", "CustomerID", id);

            return(this.QueryData(criteria));
        }
        public object FindByPredicate(object criteria, T value, string predicate)
        {
            NewCriteria <T> newCriteria = NewCriteria <T> .CreateCriteria(predicate, criteria.ToString(), value);

            return(this.QueryData(newCriteria));
        }
        public object FindBy(string criteria, params T[] value)
        {
            NewCriteria <T> newCriteria = NewCriteria <T> .CreateCriteria("=", criteria, value);

            return(this.QueryData(newCriteria));
        }