我在存储过程中有一个表
TKDV
具有包括数据类型UsageTime
的datetime
的属性。
一个显示数据库数据的数据网格视图,一个名为
cbSelectMonth
的组合框,一个名为cbSelectYear
.的组合框
当从
cbSelectYear
中选择“全部”选项时,将自动选择cbSelectMonth
中相应的“全部”选项,我将过滤和检索表TKDV
中的所有数据以显示在datagridview中。
当
cbSelectYear
选择年份和cbSelectMonth
月份时,数据库中相同月份和年份的数据将被选择显示在datagridview中。
当从
cbSelectYear
中选择年份并从 cbSelectMonth
中选择“全部”选项时,该所选年份的数据库中的所有数据将返回以显示在数据网格视图中。
如何做到这一点?
我尝试使用数组、循环、if else 但它不起作用!
在这种情况下,您将为组合框使用事件处理程序,然后根据所选值刷新数据网格视图。以下是如何在 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 获取月份索引的原因。