试图从一个数据表中检索数据,而我正试图使用C#基于某些条件填充另一个数据表格,我无法做到这一点

本文关键字:数据 数据表 填充 条件 于某些 另一个 表格 这一点 一个 检索 | 更新日期: 2023-09-27 17:59:59

我正在使用下面的代码。

我在dta中得到了数据表数据。

现在在GCSdt1中,我想填充数据,以便为每个员工显示当月的用户变动。我的意思是说桌子应该看起来像

Name | 6-1-2015|6-2-2015|.........|6-30-2015和下一行应该在名称下,它应该显示名称,在6-1-2015下,它应显示他在6-1-2015上的班次

下面是我的代码。我能够填充第一个数据表并为网格创建列。现在我被卡住了。

    SqlDataReader GCSrdr;
    SqlCommand GCScmd;
    DataRow GCSdrow;
    DataView GTView;
    DataTable GCSdt = new DataTable();
    DataTable GCSdt1 = new DataTable();
    SqlConnection GCScon = new SqlConnection("MYCOnnection");
    DateTime dt = DateTime.Today.Date;
    static DateTime today = DateTime.Today;
    DataColumn[] day1;

    static int daysInMonth = DateTime.DaysInMonth(today.Year, today.Month);
    DateTime startOfMonth = new DateTime(today.Year, today.Month, 1);
    DateTime endOfMonth = new DateTime(today.Year, today.Month, daysInMonth);
    public DataTable MonthView()
    {
        string gcsCmdSelect = "Select S.Emp_Name,S.User_Shift,S.Shift_Emp_Status,S.Shift_Date from Shift_Details S INNER JOIN Emp_Details E ON S.EMP_Name=E.Employee_Name where (S.Shift_Date >='" + startOfMonth + "') and (S.Shift_Date <='" + endOfMonth + "')  ORDER BY S.Emp_Name";
        if (GCScon.State == ConnectionState.Closed)
        {
            GCScon.Open();
        }
        SqlDataAdapter da = new SqlDataAdapter(gcsCmdSelect, GCScon);
        DataTable dta = new DataTable();
        da.Fill(dta);
       /////// Results fine

        DataView ndtv = new DataView(dta);
        GCSdt = ndtv.ToTable(true,dta.Columns[0].ToString());

        GCSdt1.Columns.Add("Name");
        for (int i = 1; i <=daysInMonth; i++)
        {
            GCSdt1.Columns.Add(startOfMonth.ToShortDateString());
            startOfMonth = startOfMonth.AddDays(1);
        }
          GCSdt1.Rows.Add();

/////////////////////卡在此处/////////''////////

        return GCSdt1;

    }
}

试图从一个数据表中检索数据,而我正试图使用C#基于某些条件填充另一个数据表格,我无法做到这一点

尝试以下的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            DataTable dta = new DataTable();
            dta.Columns.Add("Emp_Name", typeof(string));
            dta.Columns.Add("User_Shift", typeof(string));
            dta.Columns.Add("Shift_Emp_Status", typeof(string));
            dta.Columns.Add("Shift_Date", typeof(DateTime));
            dta.Columns["Shift_Date"].AllowDBNull = true;
            dta.Rows.Add(new object[] { "John", "Morning", "abc", DateTime.Parse("1/1/15") });
            dta.Rows.Add(new object[] { "John", "Morning", "abc", DateTime.Parse("1/2/15") });
            dta.Rows.Add(new object[] { "John", "Afternoon", "abc", DateTime.Parse("1/3/15") });
            dta.Rows.Add(new object[] { "John", "Morning", "abc", DateTime.Parse("1/14/15") });
            dta.Rows.Add(new object[] { "John", "Morning", "abc", DateTime.Parse("1/15/15") });
            dta.Rows.Add(new object[] { "John", "Afternoon", "abc", DateTime.Parse("1/26/15") });
            dta.Rows.Add(new object[] { "Mary", "Morning", "abc", DateTime.Parse("1/15/15") });
            dta.Rows.Add(new object[] { "Mary", "Morning", "abc", DateTime.Parse("1/22/15") });
            dta.Rows.Add(new object[] { "Mary", "Evening", "abc", DateTime.Parse("1/23/15") });
            dta.Rows.Add(new object[] { "Mary", "Afternoon", "abc", DateTime.Parse("1/24/15") });
            dta.Rows.Add(new object[] { "Mary", "Morning", "abc", null });
            dta.Rows.Add(new object[] { "Mary", "Evening", "abc", DateTime.Parse("1/26/15") });
            DataTable displayTable = new DataTable();
            DateTime firstDayOfMonth = DateTime.Parse("1/1/15");
            int numberOfDaysInMonth = firstDayOfMonth.AddMonths(1).AddDays(-1).Day;
            DateTime dayCounter = firstDayOfMonth;
            displayTable.Columns.Add("Name", typeof(string));
            for (int i = 0; i < numberOfDaysInMonth; i++)
            {
                displayTable.Columns.Add(dayCounter.ToShortDateString(), typeof(string));
                dayCounter = dayCounter.AddDays(1);
            }

            var results = dta.AsEnumerable()
                .GroupBy(x => x.Field<string>("Emp_Name"))
                .Select(x => new
                {
                    name = x.Select(y => y.Field<string>("Emp_Name")).FirstOrDefault(),
                    shifts = x.Select(y => y.Field<string>("User_Shift")).ToList(),
                    days = x.Select(y => y.Field<object>("Shift_Date")).ToList()
                }).ToList();
            foreach (var row in results)
            {
                string[] shifts = new string[numberOfDaysInMonth + 1];
                shifts[0] = row.name;
                for (int i = 0; i < row.days.Count; i++)
                {
                    if (row.days[i] != null)
                    {
                        int dayOfMonth = ((DateTime)(row.days[i])).Day;
                        string shift = row.shifts[i];
                        shifts[dayOfMonth] = shift;
                    }
                }
                DataRow shiftRow = displayTable.Rows.Add(shifts);
            }
            dataGridView1.DataSource = displayTable;
        }
    }
}
​