Фильтрация указанных записей в веб-формахC#

Место общения программистов C#
Ответить
Anonymous
 Фильтрация указанных записей в веб-формах

Сообщение Anonymous »

Проблема:
Я работаю над приложением ASP.NET WebForms, где мне нужно фильтровать записи в DataTable на основе диапазон дат. Диапазон дат выбирается с помощью раскрывающихся списков FromMonth, ToMonth, FromYear и ToYear. Цель состоит в том, чтобы отобразить отфильтрованные данные в RadGrid, но моя логика фильтрации не работает должным образом. Иногда данные не отображаются или результаты неверны.
Проблема:
Логика фильтрации на основе Поле PADate не работает должным образом. Даже когда я выбираю действительный диапазон дат с помощью раскрывающихся списков, в таблице либо нет данных, либо отображаются неправильные результаты.
Предпринятые мною шаги по отладке:
  • Проверено, что поле PADate в базе данных имеет правильный формат DateTime.
  • Проверил, что значения из выпадающих списков (FromMonth, ToMonth, FromYear и ToYear) верны.
  • Гарантировано что поле PADate правильно анализируется как значение DateTime в логике фильтрации.
Ожидаемый результат:
Я хочу, чтобы в сетке отображались только те записи, в которых PADate попадает в выбранный диапазон дат (от FromMonth/FromYear< /code> в ToMonth/ToYear).
Код:
Вот метод, который я использую Я использую для фильтрации данных:
protected void PCApplicationStatus()
{
try
{
// Get the selected values from dropdowns
int fromMonth = int.Parse(FromMonth.SelectedValue);
int toMonth = int.Parse(ToMonth.SelectedValue);
int fromYear = int.Parse(FromYear.SelectedValue);
int toYear = int.Parse(ToYear.SelectedValue);

// Create date range
DateTime startDate = new DateTime(fromYear, fromMonth, 1);
DateTime endDate = new DateTime(toYear, toMonth, DateTime.DaysInMonth(toYear, toMonth));

// Validate that 'From' date is earlier than 'To' date
if (fromYear > toYear || (fromYear == toYear && fromMonth > toMonth))
{
throw new InvalidOperationException("The 'From' date must be earlier than the 'To' date.");
}

// Fetch data from database
AdDAL obj = new AdDAL();
DataSet ds = obj.ExecutePaymentClaimQuery();

if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
DataTable dt = ds.Tables[0];
DataTable filteredDt = dt.Clone(); // Clone the structure of the original table

// Filter rows based on the date range
foreach (DataRow dr in dt.Rows)
{
DateTime? paDate = dr["PADate"] is DBNull ? (DateTime?)null : Convert.ToDateTime(dr["PADate"]);

if (paDate.HasValue && paDate.Value >= startDate && paDate.Value 0)
{
Grid.DataSource = filteredDt;
}
else
{
Grid.DataSource = null; // No matching rows found
}

Grid.DataBind(); // Rebind the grid with the filtered data
}
else
{
// No data available
Grid.DataSource = null;
Grid.DataBind();
}
}
catch (Exception ex)
{
// Log the error
Console.WriteLine("Error: " + ex.ToString());
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... n-webforms
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»