如何根据 c# winforms 中的列日期和名称将 sql 中的数据输入到特定的 datagridview 单元格中

     2023-04-11     247

关键词:

【中文标题】如何根据 c# winforms 中的列日期和名称将 sql 中的数据输入到特定的 datagridview 单元格中【英文标题】:How do you input data from sql into a specific datagridview cell based on column date and name in c# winforms 【发布时间】:2021-03-14 13:44:33 【问题描述】:

我的数据库中有一个存储数据条目的表。有一个姓名列,每个人的姓名在他们扫描序列号时插入,3 个中间列用于序列输入,最后一列是日期。 数据库样本:

我有一个带有 datagridview 的 winform,它会在每个月的每一天填充列标题中的日期。我想弄清楚的是如何根据datagridview中的日期填充不同的名称以及它们的序列号计数。我可以填充名称,但特定日期的连续计数让我很着迷。 这是我的winform的样子:

和代码:

DateTime dt = DateTime.Now;
                var startDate = new DateTime(dt.Year, dt.Month, 1);
                int days = DateTime.DaysInMonth(dt.Year, dt.Month);
                for (int i = 0; i < days; i++)
                
                    dataGridView1.Columns.Add("clm_" + startDate.ToShortDateString(), startDate.ToString("dd-MMM"));
                    startDate = startDate.AddDays(1);
                
                using (SqlConnection sqlConnection = new SqlConnection(@"connection"))
                
                    SqlCommand sqlCmd = new SqlCommand("SELECT DISTINCT NAME FROM repair_data_entry", sqlConnection);
                    sqlConnection.Open();
                    SqlDataReader sqlReaderName = sqlCmd.ExecuteReader();
                    while (sqlReaderName.Read())
                    
                        dataGridView1.Rows.Add(sqlReaderName["NAME"].ToString());
                    
                    sqlReaderName.Close();
                    
                

我需要做的是提取每个技术每天的序列数。就像比尔贝瑞斯特定日期的序列计数显示在该特定单元格中。这可能是我需要以不同方式设置数据库的事情,我不知道。这不会是一个问题。我应该注意也没有具体的名字。每天都会有 20-30 个名字在变化,所以我的意图是动态的。

编辑:

我一直在摆弄 SQL fiddler,我发现查询有效!但是,我不得不硬编码日期。由于技术人员每天都会输入数据,我如何根据 CREATED 列中的内容使它们动态化?

这是查询:

SELECT NAME AS TECH,   
[12/1/2020], [12/2/2020]  
FROM  
(SELECT NAME, REP, CREATED  
    FROM repair_data_entry) AS SourceTable  
PIVOT  
(  
COUNT(REP)  
FOR CREATED IN ([12/1/2020], [12/2/2020])  
) AS PivotTable;

http://sqlfiddle.com/#!18/8bc96/1

【问题讨论】:

我相信您会希望在对数据库的查询中执行此操作。目前尚不清楚您在每个单元格中想要什么值。 “Repair”、“BGA”和“Ber”值在哪里?示例……您希望单元格“01-Dec”的 Bill Berry 行中的内容是什么? 我认为你是对的。所以,在数据库中,序列号被存储。我只需要数一数。我对此有疑问。这是我用于主管检索数据并导出到 csv 的查询:"SELECT NAME AS TECH, COUNT(NULLIF(REPAIR,'')) AS REPAIR, COUNT(NULLIF(BGA,'')) AS BGA, COUNT(NULLIF(BER,'')) AS BER, DATE FROM repair_data_entry WHERE DATE BETWEEN '" + dtpStart.Value + "' AND '" + dtpEnd.Value + "' AND NAME = '" + cbTech.Text + "' GROUP BY NAME, DATE"; 我只需要在单元格“01-DEC”中计数比尔贝瑞,无论他那天输入了多少连续剧 很难说查询是否有效,我假设它会,我不擅长构建复杂的查询。我的观点是,如果您使用查询 AND 从数据库中获取数据,然后,格式化网格 AND 数据以以不同的方式显示它……那么您做错了。然后,您希望以应显示的方式(如果可能)从数据库中获取数据,并且出于美观原因仅“格式化”。这可能很复杂,但是与添加列、计算序列号等相比,构建查询以返回您想要的表会是一种更好的方法。 我明白了。我发布的查询非常有效。我只是不知道如何操纵这一切,所以它显示了我想要的方式。不过值得一试。这就是该查询产生的结果:query output。这对一件事很好。我只是想稍微操作一下,并在旁边显示名称和列标题中的每个日期。如果当天没有输入序列号,则显示“0”。使用谷歌表格超级容易哈哈,这是我目前使用的,但维护起来太麻烦了。 尝试使用最后一张图片,应该不难,我只能在开始之前建议您“创建”一个包含所需列的新表。不要使用网格“直接”重建它,重建为“新”表,然后将新表用作网格的数据源。 【参考方案1】:

我想通了 sql 查询:

    DECLARE @Date AS VARCHAR(MAX),
        @query AS VARCHAR(MAX)
        
select @dATE = STUFF((SELECT ',' + QUOTENAME(REPLACE(CONVERT(VARCHAR(10), CREATED, 101), '-', '/')) 
                    from repair_data_entry
                    group by CREATED
                    ORDER BY CREATED
            FOR XML PATH(''), TYPE
            ).value('.', 'VARCHAR(MAX)') 
        ,1,1,'')

SET @query = 'SELECT NAME AS TECH, ' + @Date + ' 
  
FROM  
(SELECT NAME, CREATED, REP  
    FROM repair_data_entry) AS S  
PIVOT  
(  
COUNT(REP)  
FOR CREATED IN ('+@Date+')  
) P'
EXECUTE(@query)

这正是我想要的。所以这就回答了这个问题。 sqlFiddle

谁能指出将日期样式更改为“MM / dd / yyyy”的方向?

编辑:找到答案。更新查询

【讨论】:

如何在 c# winforms 中为按钮添加货币价值? [关闭]

】如何在c#winforms中为按钮添加货币价值?[关闭]【英文标题】:HowtoaddamoneyvaluetoaButtoninc#winforms?[closed]【发布时间】:2020-08-2322:38:40【问题描述】:我正在制作一个销售点(接单)系统。我想知道如何在Winforms中为c#中的按钮赋值... 查看详情

如何根据其上的 Sql 结果隐藏 gridview 中的列?

】如何根据其上的Sql结果隐藏gridview中的列?【英文标题】:HowtohideacolumnfromgridviewbaseonaSqlresultonit?【发布时间】:2013-04-1512:58:54【问题描述】:我使用的是VB.NET,并且我有一个GridView,它有4列(删除、下载、命名和PK)。“名称... 查看详情

如何使用 MS Access 在 C# 中的两个日期之间进行搜索

】如何使用MSAccess在C#中的两个日期之间进行搜索【英文标题】:HowtosearchbetweentwodatesinC#withMSAccess【发布时间】:2016-02-0814:46:49【问题描述】:所以对于一个小组项目,我需要能够在两个日期“Start_Date”和“End_Date”之间进行搜... 查看详情

c# GDI和winforms中的径向渐变画笔效果

】c#GDI和winforms中的径向渐变画笔效果【英文标题】:c#radialgradientbrusheffectinGDIandwinforms【发布时间】:2011-03-3123:52:46【问题描述】:我创建了一个c#windows应用程序并编写了75%的代码。该程序允许用户创建流程图,并根据其状态对... 查看详情

如何防止 C# WinForm 列表视图选择更改时按下键和列表视图根据第一列自动查找下一行

】如何防止C#WinForm列表视图选择更改时按下键和列表视图根据第一列自动查找下一行【英文标题】:HowtopreventC#WinFormlistviewselectionChangewhenkeyispressedandlistviewautofindnextrowonthebasisoffirstcolumn【发布时间】:2021-09-2206:06:19【问题描述】... 查看详情

C# WinForms。在组件中实现属性“名称”

】C#WinForms。在组件中实现属性“名称”【英文标题】:C#WinForms.Implementingtheproperty"Name"inthecomponent【发布时间】:2018-02-2521:04:42【问题描述】:我想在Component中实现属性Name,它的值与指向组件的表单中的字段名称相同。pri... 查看详情

如何在 C# Winforms 的下拉列表控件中获取数据源名称

】如何在C#Winforms的下拉列表控件中获取数据源名称【英文标题】:HowtogettheDataSourcenameindropdownlistcontrolinC#Winforms【发布时间】:2014-01-0310:52:59【问题描述】:您好,我正在开发一个应用程序来将数据从一个系统检索到另一个远程... 查看详情

如何使用 c# 用 (-) 分隔的列标题拆分数据填充空行

】如何使用c#用(-)分隔的列标题拆分数据填充空行【英文标题】:Howcanifillemptyrowwith(-)separatedcolumnheadersplitdatausingc#【发布时间】:2019-06-1908:52:13【问题描述】:第一张照片是我在excel中的当前输出,第二张照片显示我想要的我遇... 查看详情

如何使用 C# 获取 Access 数据库中的列列表?

】如何使用C#获取Access数据库中的列列表?【英文标题】:HowdoIgetalistofcolumnsinanAccessdatabaseusingC#?【发布时间】:2014-08-1516:53:12【问题描述】:在运行时,如何在Access中获取表中的列列表?我不想要表中的数据,只想要列名和类型... 查看详情

如何将日期时间转换为erlang中的日期名称和月份名称?

】如何将日期时间转换为erlang中的日期名称和月份名称?【英文标题】:Howtoconvertdatetimetodaynameandmonthnameinerlang?【发布时间】:2018-12-2122:37:28【问题描述】:如何在Erlang中获得关注DateTime?FriJul1319:12:59IST2018【问题讨论】:【参考... 查看详情

如何根据重复的列值php删除关联数组中的行

】如何根据重复的列值php删除关联数组中的行【英文标题】:howtoremoverowsinanassociatearraybasedonduplicatecolumnvaluesphp【发布时间】:2021-09-1812:24:12【问题描述】:我有这个Associate数组。QuickTrackClub出现两次我想删除名称列中的任何重复... 查看详情

c# - 如何过滤包含单词和日期的日期列之间的datagridview?

】c#-如何过滤包含单词和日期的日期列之间的datagridview?【英文标题】:c#-Howtofilterdatagridviewbetweendatescolumnthatcontainwordsanddate?【发布时间】:2017-01-2709:02:16【问题描述】:我有一个名为DateColumn的列,它存储这样的创建日期:create... 查看详情

如何根据行日差和分区对 SQL 中的列进行排名?

】如何根据行日差和分区对SQL中的列进行排名?【英文标题】:HowdoIRankcolumninSQLbasedonrowday-differenceandpartition?【发布时间】:2020-04-1923:07:36【问题描述】:我正在尝试根据行差异selecthotel.*,IFNULL(datediff(visit_date,lag(visit_date)OVER(partiti... 查看详情

Winforms C#:从远程计算机文件夹获取图像并加载到 DataTable 的列中

】WinformsC#:从远程计算机文件夹获取图像并加载到DataTable的列中【英文标题】:WinformsC#:GetimagefromremotecomputerfolderandloadintoDataTable\'scolumn【发布时间】:2017-12-2119:40:21【问题描述】:我有一台远程计算机,它在一个文件夹中存储... 查看详情

如何根据另一个表中的索引序列对列中的名称进行排序?

】如何根据另一个表中的索引序列对列中的名称进行排序?【英文标题】:Howtoordernamesinacolumnbasedonanindexsequenceinanothertable?【发布时间】:2021-01-0821:24:40【问题描述】:所以我有3个表Friends和Students,它们都有一个ID列。但在Friends... 查看详情

如何根据 SwiftUI 中的日期将事件分成列表的不同部分?

】如何根据SwiftUI中的日期将事件分成列表的不同部分?【英文标题】:HowdoIseparateeventsintodifferentsectionsofalistbasedonadateinSwiftUI?【发布时间】:2019-09-2802:46:48【问题描述】:我正在使用提供2019年所有美国假期的JSON数据。这些数据... 查看详情

如何使用 Oracle 和 SQL Server 将 .NET 4.5 C# Entity Framework 6 中的列映射为大写?

】如何使用Oracle和SQLServer将.NET4.5C#EntityFramework6中的列映射为大写?【英文标题】:HowdoImapacolumntouppercasein.NET4.5C#EntityFramework6usingbothOracleandSQLServer?【发布时间】:2015-04-0917:01:10【问题描述】:我在我的项目中使用C#、.NET4.5和EntityF... 查看详情

如何使用 C# 连接到 Winform 应用程序中的 .sdf 文件?

】如何使用C#连接到Winform应用程序中的.sdf文件?【英文标题】:Howtoconnectto.sdffileinWinformapplicationusingC#?【发布时间】:2013-06-0411:30:06【问题描述】:我正在尝试将.sdf文件与我的winform连接。这就是我想要做的:SqlConnectioncon=newSqlCo... 查看详情