2017-02-02 8 views
0

У меня есть проект, чтобы сохранить назначения пациентов для определенных дат. Мой проект имеет datagridview, связанный с базой данных sqlserver. Сетка содержит столбец с именем «Время». Я назначил значения этого столбца в sqlserver.When i введите форму datagridview содержит 10 пустых строк, чтобы пользователь мог сохранить пациентов в определенные моменты времени. Форма содержит также monthcalendar.Что я хочу показать свою сетку с пустыми строками для каждой даты месяца, чтобы сохранить встречи в разные даты.MonthCalendar Дата изменения даты

Я видел это ниже, но он использовал набор данных и им работал с сущностью модели. Я не знаю, как ее реализовать, пожалуйста, помогите мне.

Public Function connect() 

    Dim sql As String = "Data Source=RINOR-PC\SQLEXPRESS;Initial Catalog=Ordinanca;Integrated Security=True" 
    Return New Sqlconnection(sql) 
End Function 

Public Function search(pmtData As Date) As DataTable 

    Using con As SqlConnection = connect() 

     Dim dt As Datatable = New Datatable() 
     Try 

      Dim query As String = "SELECT * FROM CLIENTS WHERE DT='" + pmtData + "'" 
      Dim cmd As SqlCommand = New sqlCommand(query, con) 
      Dim da As SqldataAdapter = New sqlDataadapter(cmd) 
      da.Fill(dt) 

     Catch ex As Exception 

      Messagebox.show(ex.Message) 
     Finally 
      con.close() 
     End Try 

     Return dt 

    End Using 
End Function 

Private Sub monthcalendar1_datechanged(sender As Object, e As DateRangeEventArgs) Handles monthcalendar1.datechanged 

    Dim datatable As datatable 
    Dim pmtdata As Date 
    pmtdata = monthcalendar1.selectionstart 
    datatable = search(pmtdata) 
    gridview.datasource = datatable 

End Sub 

Мой код:

Public Class Form1 
    Dim db As New OrdinancaEntities 
    Dim pacienti As New Pacientet 
    Dim isEditing As Boolean = True 
    Dim selectedPacient As Int16 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    BindingDatagridView() 
    FillData("") 
    End Sub 

    Sub BindingDatagridView() 
    dgvPacientet.DataSource = db.Pacientets.ToList() 
    End Sub 

    Sub FillData(searchText As String) 
    Dim data As List(Of Pacientet) 
    Dim context As New OrdinancaEntities 
    If searchText = "" Then 
     data = context.Pacientets.OrderBy(Function(t) t.Id).ToList() 
    Else 
     data = context.Pacientets.Where(Function(t) t.Emri.StartsWith(searchText) Or t.Mbiemri.StartsWith(searchText)).OrderBy(Function(t) t.Id).ToList() 
    End If 
    dgvPacientet.AutoGenerateColumns = False 
    dgvPacientet.DataSource = data 
    SelectClient() 
    End Sub 

    Sub EnableButton(bPërditëso As Boolean) 
    btnPërditëso.Enabled = bPërditëso 
    End Sub 

    Sub SelectClient() 
    If dgvPacientet.SelectedRows.Count > 0 Then 
     selectedPacient = CInt(dgvPacientet.SelectedRows.Item(0).Cells("Id").Value.ToString()) 

     txtEmri.Text = dgvPacientet.SelectedRows.Item(0).Cells("Emri").Value.ToString() 
     txtMbiemri.Text = dgvPacientet.SelectedRows.Item(0).Cells("Mbiemri").Value.ToString() 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Emri_prindit").Value) Then 
      txtEmri_prindit.Text = dgvPacientet.SelectedRows.Item(0).Cells("Emri_prindit").Value.ToString() 
     Else 
      txtEmri_prindit.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Datelindja").Value) Then 
      txtDatelindja.Text = dgvPacientet.SelectedRows.Item(0).Cells("Datelindja").Value.ToString() 
     Else 
      txtDatelindja.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Numri_telefonit").Value) Then 
      txtNumri.Text = dgvPacientet.SelectedRows.Item(0).Cells("Numri_telefonit").Value.ToString() 
     Else 
      txtNumri.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Diagnoza").Value) Then 
      txtDiagnoza.Text = dgvPacientet.SelectedRows.Item(0).Cells("Diagnoza").Value.ToString() 
     Else 
      txtDiagnoza.Text = "" 
     End If 
     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Tretmani_planifikuar").Value) Then 
      txtTretmani_planifikuar.Text = dgvPacientet.SelectedRows.Item(0).Cells("Tretmani_planifikuar").Value.ToString() 
     Else 
      txtTretmani_planifikuar.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Tretmani_kryer").Value) Then 
      txtTretmani_kryer.Text = dgvPacientet.SelectedRows.Item(0).Cells("Tretmani_kryer").Value.ToString() 
     Else 
      txtTretmani_kryer.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Pagesa").Value) Then 
      txtPagesa.Text = dgvPacientet.SelectedRows.Item(0).Cells("Pagesa").Value.ToString() 
     Else 
      txtPagesa.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Pagoi").Value) Then 
      txtPagoi.Text = dgvPacientet.SelectedRows.Item(0).Cells("Pagoi").Value.ToString() 
     Else 
      txtPagoi.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Doktori").Value) Then 
      cboDoktori.Text = dgvPacientet.SelectedRows.Item(0).Cells("Doktori").Value.ToString() 
     Else 
      cboDoktori.Text = "" 
     End If 

     If Not IsNothing(dgvPacientet.SelectedRows.Item(0).Cells("Dt_terminit").Value) Then 
      Me.MonthCalendar1.SelectionStart = dgvPacientet.SelectedRows.Item(0).Cells("Dt_terminit").Value.ToString() 
     Else 
      Me.MonthCalendar1.SelectionStart = Date.Now 
     End If 
    End If 
    End Sub 

    Private Sub btnPërditëso_Click(sender As Object, e As EventArgs) Handles btnPërditëso.Click 

    If isEditing Then 
     Dim context As New OrdinancaEntities 
     Dim client As Pacientet = (From c In context.Pacientets 
           Where c.Id = selectedPacient 
            Select c).FirstOrDefault() 
     client.Emri = txtEmri.Text 
     client.Mbiemri = txtMbiemri.Text 
     client.Emri_prindit = txtEmri_prindit.Text 
     client.Datelindja = txtDatelindja.Text 
     client.Numri_telefonit = txtNumri.Text 
     client.Diagnoza = txtDiagnoza.Text 
     client.Tretmani_planifikuar = txtTretmani_planifikuar.Text 
     client.Tretmani_kryer = txtTretmani_kryer.Text 
     client.Pagesa = txtPagesa.Text 
     client.Pagoi = txtPagoi.Text 
     client.Doktori = cboDoktori.SelectedItem 
     client.Dt_terminit = Me.MonthCalendar1.SelectionStart 
     context.SaveChanges() 
     BindingDatagridView() 
    End If 
    isEditing = True 
    FillData("") 
    MessageBox.Show("Të dhënat u insertuan me sukses.") 
    End Sub 

    Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click 
    ClearText() 
    End Sub 

    Sub ClearText() 
    txtEmri.Clear() 
    txtMbiemri.Clear() 
    txtNumri.Clear() 
    txtDiagnoza.Clear() 
    txtPagesa.Clear() 
    txtPagoi.Clear() 
    cboDoktori.Text = "Zgjedh doktorin" 
    txtEmri.Focus() 
    txtTretmani_planifikuar.Clear() 
    txtTretmani_kryer.Clear() 
    txtDatelindja.Clear() 
    txtEmri_prindit.Clear() 
    End Sub 

    Private Sub txtKerko_TextChanged(sender As Object, e As EventArgs) Handles txtKerko.TextChanged 
    FillData(txtKerko.Text) 
    End Sub 

    Private Sub dgvPacientet_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgvPacientet.RowEnter 
    SelectClient() 
    End Sub 
End Class 
+0

заменить данные, которые возвращены из «Поиск» в списке сущностей? Пока имена свойств вашего объекта совпадают с gridview, он должен работать? – ADyson

+0

@Adyson Я не могу использовать sqlcommand, sqlconnection, dataAdapter, пока я использую модель Entity – Rinor

+0

именно так я и говорю. Замените весь код в функции поиска кодом, который вы используете для извлечения вашего объекта. Из вашего вопроса это звучит так, как вы уже писали это. Вы все равно можете использовать список своих объектов для привязки к gridview. – ADyson

ответ

0

Я думаю, что это что-то вроде того, что вам нужно. Он просто заменяет все DataTable связанных функций внутри функции «поиска» с гораздо более простым вызовом вашего Entity Framework класса:

Private Sub monthcalendar1_datechanged(sender As Object, e As DateRangeEventArgs) Handles monthcalendar1.datechanged 
    Dim pmtdata As Date 
    pmtdata = monthcalendar1.selectionstart 
    Dim records = db.Pacientets.Where(Function(p) p.dt_terminit.Equals(pmtdata)).ToList() 

    'add extra rows if not all rows populated 
    If (records.Count() < 10) Then 
    Dim timeSlots = db.TimeSlots 'get the list of all possible appointment times in one day, this is a new table you must create and populate in advance 

    For Each(slot in timeSlots) 
     'here, check that the slots's time is not in any of the items in the "records" list 
     'if it's not, add it to the Pacientes table with only time and date completed. 
    Next 

    'requery the DB 
    records = db.Pacientets.Where(Function(p) p.dt_terminit.Equals(pmtdata)).ToList() 
    End If 

    gridview.datasource = records 
End Sub 

Очевидно, что вам придется изменить какие-либо имена переменных или полей, такие как MonthCalendar или gridview, к тому, что вы используете. Я также использовал Time.Date, исходя из того, что ваш столбец Time будет содержать определенное время, тогда как календарь месяца содержит даты без раз.

Кроме того, я не знаю, является ли «Pacientets» правильное право на запрос здесь. Я не говорю на вашем языке, но это похоже на список пациентов. Если вы даете время, возможно, у вас есть другое лицо, которое описывает список назначений, относящихся к определенному времени, и конкретному пациенту?

+0

привет, я попробовал ваш ответ, но, как я уже упоминал, когда я вхожу в форму, datagridview содержит 10 строк с пустыми строками. Я заполнил эти строки в sqlserver, я пустил их, кроме Time, в столбце time i inserten hours from 09:00 to 18:00, поэтому, когда я вхожу в форму, я выбираю строку, которая содержит определенное время, записывайте информацию о пациенте в текстовые поля и затем нажимаете кнопку Perditeso, что означает обновление на вашем языке, а затем пациент вставлен в это конкретное время. – Rinor

+0

С вашим кодом gridview не имеет строк, мне нужны те строки, которые я создал в sql каждый раз, когда я ввожу причину формы с теми строками, которые я указываю, в какое время мне приходится вставлять пациента. Хорошего дня ! Надеемся на ваш ответ – Rinor

+0

, поэтому ... вы создали 10 строк в SQL, и все же они не возвращаются? В какой таблице в базе данных находятся эти строки?Являются ли они в Pacientets или другом столе? И ваша колонка «Время» также содержит дату, а также время суток? – ADyson