Привет, ребята, это должна быть простая логика для большинства программистов, но я не могу ее понять.
У меня есть 2 datetimepicker в моей форме Windows datetimepicker 1 = fromdate datetimepicker 2 = todate
дату и дату я получаю из приведенного ниже sql
SELECT MIN(TransDate) AS mindate, MAX(TransDate) AS maxdate
FROM dbo.EtimePunchDetail WHERE (EmpID = @empid)
fromdate = mindate и todate = maxdate
fromdate.mindate = mindate todate.maxdate = maxdate ("Таким образом, пользователь работает только с выбранным диапазоном дат")
я добавил два текстовых поля с функцией поиска, в которые пользователь может ввести fromdate и todate, и он проверяет соответствие mindate и maxdate, и если пользователь вводит дату вне диапазона, я устанавливаю окно сообщения, чтобы выдать ошибку
У меня изменилось текстовое поле, даже если есть следующий запрос:
private void Min_TextChanged(object sender, EventArgs e)
{
DateTime date = DateTime.Parse(Min.Text);
if (date < DateTime.Parse(AvailableMin.Text))
{
MessageBox.Show("The Date you entered is either out of range or an invalid format");
}
else
{
FromDate.MinDate = date;
FromDate.Value = date;
}
}
private void Max_TextChanged(object sender, EventArgs e)
{
DateTime date = DateTime.Parse(Max.Text);
if (date > DateTime.Parse(AvailableMax.Text))
{
MessageBox.Show("The Date you entered is either out of range or an invalid format");
}
else
{
ToDate.MaxDate = date;
ToDate.Value = date;
}
}
Но когда я меняю текст, событие textchanged запускается вместе с сообщением и не позволяет мне изменить дату или говорит, что это недопустимая дата. я хочу иметь возможность ввести дату, а затем textchanged должен проверить, не находится ли введенная дата в диапазоне, как я могу это сделать ??
вот визуальное представление того, что я прошу:
Дополнительный код о том, как я получаю минимальную и максимальную дату и другие вещи, которые я делаю с этими значениями, я должен был включить это в свой вопрос, прежде чем приносить извинения за то, что проверка datetimepicker мешает проверке текстового поля
Минимальное и максимальное значение
private void mindateset() // fill the listbox of values of mindate and maxdate
{
if (Employee.SelectedValue != null)
{
if (Employee.SelectedValue.ToString().Trim().Length > 0)
{
try
{
using (MSSQL.SqlConnection connection = new MSSQL.SqlConnection(constr))
{
timepunchnew = new EtimeHistoryDataSet();
connection.Open();
using (MSSQL.SqlCommand command = new MSSQL.SqlCommand("SELECT MIN(TransDate) AS mindate, MAX(TransDate) AS maxdate FROM dbo.EtimePunchDetail WHERE (EmpID = @empid)", connection))
{
MSSQL.SqlParameter myminparam = new MSSQL.SqlParameter();
myminparam.Direction = ParameterDirection.Input;
myminparam.ParameterName = "@empid";
myminparam.Value = Employee.SelectedValue;
command.Parameters.Add(myminparam);
MSSQL.SqlDataAdapter myadapter = new System.Data.SqlClient.SqlDataAdapter();
myadapter.SelectCommand = command;
myadapter.Fill(timepunchnew, "Mindate");
AvailableMin.DataSource = timepunchnew.Mindate;
AvailableMin.DisplayMember = "mindate";
AvailableMax.DataSource = timepunchnew.Mindate;
AvailableMax.DisplayMember = "maxdate";
FromDate.MinDate = DateTime.Parse(AvailableMin.Text);
FromDate.Value = FromDate.MinDate;
ToDate.MaxDate = DateTime.Parse(AvailableMax.Text);
ToDate.Value = ToDate.MaxDate;
Min.Text = FromDate.MinDate.ToString("d");
Max.Text = ToDate.MaxDate.ToString("d");
}
}
}
catch (Exception) { /*Handle error*/ }
}
}
}
Проверка значений datetimepicker
private void FromDate_ValueChanged_1(object sender, EventArgs e)
{
if (empchanging == false)
{
if (FromDate.Value > ToDate.Value)
{
// MessageBox.Show("From Date Cannot Be Greater Than To Date");
if (DialogResult.OK == MessageBox.Show("From Date Cannot Be Greater Than To Date"))
{
FromDate.MinDate = DateTime.Parse(AvailableMin.Text);
FromDate.Value = FromDate.MinDate;
}
}
}
}
private void ToDate_ValueChanged_1(object sender, EventArgs e)
{
if (empchanging == false)
{
if (ToDate.Value < FromDate.Value)
{
//MessageBox.Show("To Date Cannot Be Less Than From Date");
if (DialogResult.OK == MessageBox.Show("To Date Cannot Be Less Than From Date"))
{
ToDate.MaxDate = DateTime.Parse(AvailableMax.Text);
ToDate.Value = ToDate.MaxDate;
}
}
}
}
Проверка доступного диапазона дат для пустой строки
private void AvailableMin_SelectedIndexChanged(object sender, EventArgs e)
{
if (AvailableMin.Text == string.Empty)
{
textBox2.Visible = true;
textBox2.Text = "There is no From Date available for this particular user";
}
else
{
textBox2.Visible = false;
}
}
private void AvailableMax_SelectedIndexChanged(object sender, EventArgs e)
{
if (AvailableMax.Text == string.Empty)
{
textBox1.Visible = true;
textBox1.Text = "There is no To Date available for this particular user";
}
else
{
textBox1.Visible = false;
}
}
Я попробовал следующее решение
private void Min_TextChanged(object sender, EventArgs e)
{
DateTime date;
if (!DateTime.TryParse(Min.Text, out date))
{
formerrorprovider.SetError(this.Min,"The Date you entered is in invalid format");
}
else if (date < DateTime.Parse(AvailableMin.Text))
{
formerrorprovider.SetError(this.Min, "The Date you entered is either out of range");
}
else
{
formerrorprovider.SetError(this.Min, string.Empty);
FromDate.MinDate = date;
FromDate.Value = date;
}
он принимает дату, которую я ввожу, но мешает проверке средства выбора даты и времени.
ПОМОЩЬ PLZ
Run Report
. Таким образом, вы не заставите их играть в игру, пытаясь выяснить порядок, в котором они должны менять поля, например.From Date
не должно быть позже, чемTo Date
, но если вы хотите изменить оба, вам может придется сначала изменить From. Они могут копировать и вставлять, корректировать и возиться с содержанием их сердца. Конечно, при вводе данных в штрих-коде сотрудника могут быть запрещены символы, кроме цифр, но это не проверка. - person HABO   schedule 17.02.2015