Local
Dener misiniz ?
Kodlarınızda muhtemelen tarih sütununuzun ismini yanlış kullanıyorsunuz. SQL sorgusundaki Date sütunu, veritabanınızdaki gerçekte var olan sütunun ismi ile eşleşmiyor olabilir. Ayrıca, PopulateListView metodu içinde listView'u temizlemelisiniz ki her filtreleme işleminde eski sonuçlar tekrar gösterilmesin. Aşağıda düzeltilmiş haliyle kodlarınızı bulabilirsiniz:
using System;
using System.Data.SqlClient;
using System.Windows.Forms;
public class Form9 : Form
{
private ListView listView;
private Button filterButton;
private DateTimePicker startDatePicker;
private DateTimePicker endDatePicker;
public Form9()
{
InitializeComponent();
PopulateListView(DateTime.MinValue, DateTime.MaxValue); // Başlangıçta tüm verileri yükler
startDatePicker = new DateTimePicker { Format = DateTimePickerFormat.Short, Dock = DockStyle.Top };
endDatePicker = new DateTimePicker { Format = DateTimePickerFormat.Short, Dock = DockStyle.Top };
filterButton = new Button { Text = "Filter", Dock = DockStyle.Top };
filterButton.Click += FilterButton_Click;
Controls.Add(filterButton);
Controls.Add(endDatePicker);
Controls.Add(startDatePicker);
Controls.Add(listView);
}
private void PopulateListView(DateTime startDate, DateTime endDate)
{
listView.Items.Clear(); // Önceki öğeleri temizle
string connectionString = "Data Source=DESKTOP-G6C00I7\\SQLEXPRESS;Initial Catalog=Ambar;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string query = "SELECT İD, Stok_Kodu, Kayıt_Tarihi FROM Stok WHERE Kayıt_Tarihi >= @StartDate AND Kayıt_Tarihi <= @EndDate";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@StartDate", startDate);
command.Parameters.AddWithValue("@EndDate", endDate);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var listViewItem = new ListViewItem(reader["İD"].ToString());
listViewItem.SubItems.Add(reader["Stok_Kodu"].ToString());
listViewItem.SubItems.Add(Convert.ToDateTime(reader["Kayıt_Tarihi"]).ToShortDateString());
listView.Items.Add(listViewItem);
}
}
}
}
}
private void FilterButton_Click(object sender, EventArgs e)
{
DateTime startDate = startDatePicker.Value.Date;
DateTime endDate = endDatePicker.Value.Date;
PopulateListView(startDate, endDate);
}
}
Bu kodda dikkat edilmesi gereken noktalar:
1-) SQL sorgusunda tarih filtresi uyguladığınız sütunun isminin Kayıt_Tarihi olduğuna emin olun.
2-) Her filtreleme işleminde listView içeriği temizlenir, böylece sonuçlar birikmez.
3-) SQL sorgunuzda parametreleri doğru şekilde kullanarak tarih aralığına göre filtreleme yapabilirsiniz.
4-) Eğer tarih sütununuzun ismi farklıysa, onu Kayıt_Tarihi yerine kullanmalısınız. Kodlarınızı bu şekilde düzenleyerek hatayı düzeltebilirsiniz.