Цикл каждого элемента dataRow и группировать их по столбцу первичного ключа - PullRequest
0 голосов
/ 01 октября 2018

Я возвращаю dataRow с сервера SQL, который содержит встречи: Тема, Начальная дата, Конечная дата и Идентификатор канала.

Мне нужно выполнить цикл по каждому элементу dataRow, чтобы иметь возможность группировать элементыопределенный идентификатор канала в отдельности, чтобы иметь возможность добавить их в ultraGanttView.

Следующий код работает правильно для привязки данных к UltreMonthViewSingle.

Так что мне нужно, чтобы иметь возможностьсвязать данные в ganttView - это сгруппировать их по проекту, который в моем случае является идентификатором канала.

 private void FillCalendar()
    {
        string query = @"select rs.[Planned Date in] as pdin,rs.[Planned Date out] as pdout, CONCAT(cn.Name,' ',ps.[First Name],' ',ps.[Last Name]) as subj, cn.[ID]
                        from [dbo].[Reservations] rs
                        inner join [dbo].[Person] ps on rs.[Person ID] = ps.ID
                        inner join [dbo].[Channel] cn on rs.[Channel ID] = cn.ID";
        SqlConnection conn = new SqlConnection(Utilities.ConnectionString);
        conn.Open();
        //return reservations datatable
        DataTable table = new DataTable();
        SqlDataAdapter adp2 = new SqlDataAdapter(query, conn);
        adp2.Fill(table);

        //bind appointments
        Appointment appointment;
        DateTime dateIn, dateOut;
        String subj;

        foreach (DataRow dataRow in table.Rows)
        {
            dateIn = DateTime.Parse(dataRow["pdin"].ToString());
            dateOut = DateTime.Parse(dataRow["pdout"].ToString());
            dateIn.ToString("dd-MMMM-yyyy");
            subj = dataRow["subj"].ToString();
            appointment = this.ultraCalendarInfo1.Appointments.Add(dateIn, dateOut, subj);
        }

    }

Что мне добавить в цикл, чтобы он мог работать?

Этодокументация по привязке данных в ganttView GanttView Binding

Спасибо

1 Ответ

0 голосов
/ 03 октября 2018

Это то, что я сделал, и это работает.

 private void BindGantt()
    {
        this.ultraGanttView1.CalendarInfo = this.ultraCalendarInfo1;
        string query = "select rs.[Channel ID],c.Name from[dbo].[Reservations] rs inner join[dbo].[Channel] c on rs.[Channel ID] = c.ID group by rs.[Channel ID],c.Name";
        DataTable dt = new DataTable();
        DataTable dc = new DataTable();
        SqlConnection conn = new SqlConnection(Utilities.ConnectionString);
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = query;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        DateTime dateFrom;
        TimeSpan duration;
        string subject;

        int id;
        //get the channels' id that have reservations 
        for (int j = 0; j < dt.Rows.Count; j++)
        {
            id = Convert.ToInt32(dt.Rows[j].ItemArray[0].ToString());  
            dc = GetChannelsReservations(id);
            //get the info of all the reservations for a channel
            ultraCalendarInfo1.Tasks.Add(DateTime.Now, TimeSpan.FromDays(0), dt.Rows[j].ItemArray[1].ToString());
            for (int i = 0; i < dc.Rows.Count; i++)
            {
                dateFrom = Convert.ToDateTime(dc.Rows[i].ItemArray[0]);
                TimeSpan.TryParse(dc.Rows[i].ItemArray[1].ToString(),out duration);
                subject = dc.Rows[i].ItemArray[2].ToString();
                ultraCalendarInfo1.Tasks[j].Tasks.Add(dateFrom, duration, subject);     
            }
        }
    }
    private DataTable GetChannelsReservations(int id) {
        string query = @"select rs.[Planned Date in],DATEDIFF(DAY, rs.[Planned Date in],rs.[Planned Date out]) as TimeSpan,c.Name+' '+p.[First Name]+' '+p.[Last Name],c.Name
                        from[dbo].[Reservations] rs
                        inner join[dbo].[Channel] c on rs.[Channel ID] = c.ID
                        inner join[dbo].[Person] p on rs.[Person ID] = p.ID
                        where rs.[Channel ID] ="+id;
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection(Utilities.ConnectionString);
        conn.Open();
        SqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = query;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        return dt;
    }
...