C# 如何根据WinC窗体中的列日期和名称将sql中的数据输入特定的datagridview单元格

C# 如何根据WinC窗体中的列日期和名称将sql中的数据输入特定的datagridview单元格,c#,sql,winforms,datagridview,C#,Sql,Winforms,Datagridview,我的数据库中有一个存储数据项的表。这里有一个姓名栏,每个人在扫描序列号时都会在其中插入姓名,中间有三列用于序列输入,最后一列是日期。 数据库示例: 我有一个带有datagridview的winform,它在列标题中填充每月每一天的日期。我想弄清楚的是,如何根据datagridview中的日期填充不同的名称和序列号计数。我可以填写姓名,但特定日期的序列计数让我感到困惑。 以下是我的winform的外观: 以及守则: DateTime dt = DateTime.Now;

我的数据库中有一个存储数据项的表。这里有一个姓名栏,每个人在扫描序列号时都会在其中插入姓名,中间有三列用于序列输入,最后一列是日期。 数据库示例:

我有一个带有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();
                    
                }

我找到了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)
这正是我想要的。这就是答案。

有人能告诉我将日期样式更改为MM/dd/yyyy的方向吗


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

我找到了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)
这正是我想要的。这就是答案。

有人能告诉我将日期样式更改为MM/dd/yyyy的方向吗


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

我相信您会希望在对DB的查询中这样做。不清楚每个单元格中需要什么值。“修复”、“BGA”和“Ber”值在哪里?例如…你想在单元格“01 Dec”的Bill Berry行中得到什么?我想你是对的。所以,在数据库中,序列号被存储。我只需要数一数。对此我有一个疑问。以下是我用于主管检索数据并导出到csv的查询:选择NAME AS TECH,COUNTNULLIFREPAIR,AS REPAIR,COUNTNULLIFBGA,AS BGA,COUNTNULLIFBER,AS BER,DATE FROM REPAIR_data_条目,其中日期介于“+dtpStart.Value+”和“+dtpEnd.Value+”之间,NAME=”+cbTech.Text+”按名称分组,日期;我只需要bill berry在01-DEC单元格中的计数,不管他在那天输入了多少连载,很难说查询是否有效,我想会的,我不太擅长构建复杂的查询。我的观点是,如果您使用查询从数据库获取数据,然后格式化网格和数据,以不同的方式显示数据,那么您就做错了。然后,如果可能的话,您希望从数据库中获取数据的显示方式,并且出于美观的原因,只需要“格式化”。这可能很复杂,但是,与添加列、计算序列号等相比,构建查询以返回您想要的表是更好的方法。我理解。我发布的查询非常有效。我只是不知道如何操纵这一切,所以它显示了我的愿望。不过值得一试。这是该查询生成的内容:。有一点很好。我只是想稍微处理一下,并用旁边的名称和列标题中的每个日期来显示它。如果当天没有输入序列号,则显示0。超级容易使用google sheets哈哈,这是我目前使用的,但维护起来太麻烦了。尝试使用最后一张图片,这应该不难,在开始之前我只能建议你用你想要的列“创建”一个新表。不要使用网格“直接”重建它,重建为“新”表,然后将新表用作网格的数据源。我相信您会希望在对数据库的查询中这样做。不清楚每个单元格中需要什么值。“修复”、“BGA”和“Ber”值在哪里?例如…你想在单元格“01 Dec”的Bill Berry行中得到什么?我想你是对的。所以,在数据库中,序列号被存储。我只需要数一数。对此我有一个疑问。以下是我用于主管检索数据并导出到csv的查询:选择NAME AS TECH,COUNTNULLIFREPAIR,AS REPAIR,COUNTNULLIFBGA,AS BGA,COUNTNULLIFBER,AS BER,DATE FROM REPAIR_data_条目,其中日期介于“+dtpStart.Value+”和“+dtpEnd.Value+”之间,NAME=”+cbTech.Text+”按名称分组,日期;我只需要bill berry在01-DEC单元格中的计数,不管他在那天输入了多少连载,很难说查询是否有效,我想会的,我不太擅长构建复杂的查询。我的观点是,如果您使用查询从数据库获取数据,然后格式化网格和数据,以不同的方式显示数据,那么您就做错了。然后,如果可能的话,您希望从数据库中获取数据的显示方式,并且出于美观的原因,只需要“格式化”。这可能很复杂,但是,与添加列、计算序列号等相比,构建查询以返回您想要的表是更好的方法。我理解。我发布的查询非常有效。我只是不知道如何操纵这一切,所以它显示了我的愿望。不过值得一试。这是该查询生成的内容:。那是
有一件事很好。我只是想稍微处理一下,并用旁边的名称和列标题中的每个日期来显示它。如果当天没有输入序列号,则显示0。超级容易使用google sheets哈哈,这是我目前使用的,但维护起来太麻烦了。尝试使用最后一张图片,这应该不难,在开始之前我只能建议你用你想要的列“创建”一个新表。不要使用网格“直接”重建它,重建为“新”表,然后将新表用作网格的数据源。