Привязка производного DataTable к SQL-созданному DataTable для заполнения таблицы данных - PullRequest
0 голосов
/ 02 октября 2011

Я в растерянности и искал повсюду, чтобы понять, как сделать это так, как я понимаю, но все же не повезло. Я пытаюсь показать время, когда клиент свободен, и что запланировано на ежедневной основе. Их расписание хранится на сервере и показывает их занятое время. Я извлек эти данные с помощью SQL-запроса и поместил их в таблицу данных с именем dtSched. Затем я создал еще одну таблицу данных под названием dtTime, чтобы перечислить время с 6:00 до 22:00 с шагом 15 минут. То, что я сейчас пытаюсь сделать, это объединить обе таблицы данных, чтобы отобразить все время, указанное в dtTime, и отобразить, где у клиента запланировано время, поэтому я могу отображать пустые строки, позволяющие добавлять встречи, и отображать запланированное время, поэтому встречи не добавляются временной интервал.

Вот мой код для создания таблицы dtTime (все время):

    Dim strStartDate As DateTime
    Dim strEndDate As DateTime

    strStartDate = DateValue(Now()) & " 6:00 AM"
    strEndDate = DateValue(Now()) & " 10:00 PM"

    While strStartDate <= strEndDate
        strStartDate = strStartDate.AddMinutes(15)
        Dim dr As System.Data.DataRow = dt.NewRow()
        dr("Time") = strStartDate
        dt.Rows.Add(dr)
    End While

Вот мой источник данных dtSched, полученный из sql (запланированное время):

Dim conn = New SqlConnection("Connection")
Dim strSQL As String

strSQL = "SELECT * FROM MYTABLE WHERE SCHED DATE = 'Date'"
Me.dataAdapter = New SqlDataAdapter(strSQL, conn)
Dim commandBuilder As New SqlCommandBuilder(Me.dataAdapter)
Dim dtSched As New DataTable()
dtSched.Locale = System.Globalization.CultureInfo.InvariantCulture
Me.dataAdapter.Fill(dtSched)

Я пытался использовать выполнение GetData, чтобы связать две таблицы данных, но это не сработало:

Me.dataGrid.DataSource = Me.BindingSource1
    GetData("SELECT dt.Time, dtSched.Date, dtSched.ID, dtSched.Client, dtSched.StartTime, dtSched.Reason FROM dt LEFT JOIN dtSched ON dt.Time = dtSched.StartTime")

Я пытаюсь соединить обе таблицы данных с помощью dt.Time и dtSched.StartTime. Затем заполните сетку данных. Любая помощь, которую кто-либо может оказать, будет просто потрясающей!

Спасибо!

1 Ответ

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

Неважно, я понял это!Да!

Если у кого-то возникла такая же проблема, я взял две таблицы данных и произвел слияние, используя следующий код:

        Dim pk1(0) As DataColumn
        Dim pk2(0) As DataColumn

        pk1(0) = dtTime.Columns("Time")
        dtTime.PrimaryKey = pk1

        pk2(0) = dtSched.Columns("Time")
        dtSched.PrimaryKey = pk2
        dtTime.Merge(tblSched, False, MissingSchemaAction.Ignore)

        Me.BindingSource1.DataSource = dtTime

Я добавил имена столбцов в свою таблицу dtTime, которые былив таблице dtSched перед слиянием, а затем boud dtTime в мою сетку данных, и это был перенос!Я также добавил в таблицу третью таблицу данных, и она работала как перчатка.Какое облегчение!

...