使用 ComboBox 将日期时间从 SQL 过滤到 DataGridView

问题描述 投票:0回答:1

我在存储过程中有一个表

TKDV
具有包括数据类型
UsageTime
datetime
的属性。

一个显示数据库数据的数据网格视图,一个名为

cbSelectMonth
的组合框,一个名为
cbSelectYear
.

的组合框

当从

cbSelectYear
中选择“全部”选项时,将自动选择
cbSelectMonth
中相应的“全部”选项,我将过滤和检索表
TKDV
中的所有数据以显示在datagridview中。

cbSelectYear
选择年份和
cbSelectMonth
月份时,数据库中相同月份和年份的数据将被选择显示在datagridview中。

当从

cbSelectYear
中选择年份并从
cbSelectMonth
中选择“全部”选项时,该所选年份的数据库中的所有数据将返回以显示在数据网格视图中。

如何做到这一点?

我尝试使用数组、循环、if else 但它不起作用!

c# sql-server winforms
1个回答
0
投票

在这种情况下,您将为组合框使用事件处理程序,然后根据所选值刷新数据网格视图。以下是如何在 C# 中实现此功能的基本概述:

首先,您需要处理 cbSelectYear 和 cbSelectMonth 组合框的选择更改事件。

private void cbSelectYear_SelectedIndexChanged(object sender, EventArgs e)
{
    RefreshDataGridView();
}

private void cbSelectMonth_SelectedIndexChanged(object sender, EventArgs e)
{
    RefreshDataGridView();
}

然后你将实现 RefreshDataGridView 方法:

private void RefreshDataGridView()
{
    string selectedYear = cbSelectYear.SelectedItem.ToString();
    string selectedMonth = cbSelectMonth.SelectedItem.ToString();

    string query;

    if (selectedYear == "All" && selectedMonth == "All")
    {
        query = "SELECT * FROM TKDV";
    }
    else if (selectedYear != "All" && selectedMonth == "All")
    {
        query = $"SELECT * FROM TKDV WHERE YEAR(UsageTime) = {selectedYear}";
    }
    else if (selectedYear != "All" && selectedMonth != "All")
    {
        int monthIndex = DateTime.ParseExact(selectedMonth, "MMMM", CultureInfo.InvariantCulture).Month;
        query = $"SELECT * FROM TKDV WHERE YEAR(UsageTime) = {selectedYear} AND MONTH(UsageTime) = {monthIndex}";
    }
    
    // Rather use stored procedures
}

这是一个简单的示例,可能需要根据您的特定需求进行调整。它假定“All”选项在组合框中表示为字符串“All”。此外,它假定 selectedMonth 是月份的全名,这就是它使用 DateTime.ParseExact 获取月份索引的原因。

© www.soinside.com 2019 - 2024. All rights reserved.