2016-08-04 20 views
0

Peace Everyone, Ich habe derzeit Probleme mit dieser Art von Methode beim Hinzufügen einer ungebundenen Spalte in Datagridview mit gebundenen Spalten. Weil ich diese Art von Methode nicht verwenden kann, ohne "für jede Aussage" verwenden zu müssen, was ich schon sehr irritierend finde. Da ich versuche, dies zu lösen, indem ich nicht auf dieser Seite frage. Aber ja, ich gebe schon auf. Also, hier sind meine Codes. Bitte hilf mir.Wie Hinzufügen von Zellendaten zu einer ungebundenen Spalte mit gebundenen Spalten, ohne für jedes zu verwenden? - VB NET

'------------REFRESH DISPLAY------------' 
Public Sub RefreshDaysDetails() 
    '------------CONNECTION DATABASE------------' 
    Dim connectionDaysDetails As New SqlConnection(_1LoginForm.connectionstring) 
    '------------QUERY------------' 
    sqlDaysDetails = "SELECT Date,CONVERT(varchar(15), TimeIn, 100) AS 'Time In',CONVERT(varchar(15), TimeOut, 100) AS 'Time Out',DATEPART(hour, WorkingHours) AS 'Working Hours' FROM [3EmployeeAttendance] WHERE TimeOut IS NOT NULL AND TimeIn IS NOT NULL" 
    '------------START CONNECTION------------' 
    connectionDaysDetails.Open() 
    '------------SQL------------' 
    sCommandDaysDetails = New SqlCommand(sqlDaysDetails, connectionDaysDetails) 
    sAdapterDaysDetails = New SqlDataAdapter(sCommandDaysDetails) 
    sBuilderDaysDetails = New SqlCommandBuilder(sAdapterDaysDetails) 
    sDsDaysDetails = New DataSet() 



    sAdapterDaysDetails.Fill(sDsDaysDetails, "DaysDetails") 
    sTableDaysDetails = sDsDaysDetails.Tables("DaysDetails") 

    '------------SET OF BINDING SOURCE------------' 
    DaysDetailsbindingsource.DataSource = sDsDaysDetails.Tables("DaysDetails") 


    '------------CONNECTION DATABASE------------' 
    Dim connectionDaysDetailsTwo As New SqlConnection(_1LoginForm.connectionstring) 
    '------------QUERY------------' 
    sqlDaysDetailsTwo = "SELECT DATEPART(hour,TimeIn) as 'TotalWorkingHoursTimeIn',DATEPART(hour,TimeOut) as 'TotalWorkingHoursTimeOut' FROM [3EmployeeAttendance] WHERE TimeOut IS NOT NULL AND TimeIn IS NOT NULL " 

    '------------START CONNECTION------------' 
    connectionDaysDetailsTwo.Open() 

    '------------SQL------------' 
    sCommandDaysDetailsTwo = New SqlCommand(sqlDaysDetailsTwo, connectionDaysDetailsTwo) 
    sAdapterDaysDetailsTwo = New SqlDataAdapter(sCommandDaysDetailsTwo) 
    sBuilderDaysDetailsTwo = New SqlCommandBuilder(sAdapterDaysDetailsTwo) 


    '------------CODES TO DISPLAY DATA TO TEXTBOXES------------' 
    sCommandDaysDetailsTwo.Prepare() 
    sDataReaderDaysDetailsTwo = sCommandDaysDetailsTwo.ExecuteReader() 

    For Each row In sDataReaderDaysDetailsTwo 
     TotalWorkingHoursTimeIn = sDataReaderDaysDetailsTwo.Item("TotalWorkingHoursTimeIn") 
     TotalWorkingHoursTimeOut = sDataReaderDaysDetailsTwo.Item("TotalWorkingHoursTimeOut") 
     While TotalWorkingHoursTimeIn < TotalWorkingHoursTimeOut 
      TotalWorkingHours = TotalWorkingHours + 1 
      TotalWorkingHoursTimeIn = TotalWorkingHoursTimeIn + 1 
     End While 
    Next 


    '------------BINDS DGV TO THE EXISTING DATA------------' 
    DGVViewDaysDetailsForm.DataSource = DaysDetailsbindingsource 

    '------------CREATES DATA GRID VIEW TEXBOX COLUMN AND ADDS IT TO DATA GRID VIEW------------' 
    Dim TotalWorkHoursextraColumn As New DataGridViewTextBoxColumn 
    With TotalWorkHoursextraColumn 
     .Name = "TotalWorkHoursPerDay" 
     .HeaderText = "Total Work Hours" 
     .ReadOnly = True 
    End With 
    DGVViewDaysDetailsForm.Columns.Add(TotalWorkHoursextraColumn) 


    '------------LOOP DGV TO CALCULATE TOTAL HOURS PER ROW------------' 
    For Each row As DataGridViewRow In DGVViewDaysDetailsForm.Rows 
     row.Cells("TotalWorkHoursPerDay").Value = CInt(TotalWorkingHours) 
    Next 

    '------------CLOSE CONNECTION------------' 
    connectionDaysDetailsTwo.Close() 



    '------------CLOSE CONNECTION------------' 
    connectionDaysDetails.Close() 
    '------------DATA BINDINGS------------' 
    DGVViewDaysDetailsForm.DataSource = DaysDetailsbindingsource 
    BNViewDaysDetailsForm.BindingSource = DaysDetailsbindingsource 


    '------------DATA GRID VIEW SELECTION------------' 
    DGVViewDaysDetailsForm.SelectionMode = DataGridViewSelectionMode.FullRowSelect 
    DGVViewDaysDetailsForm.MultiSelect = False 



End Sub 

Und das ist die Bildausgabe des Codes oben:

ImageOutput

Wie Sie die Arbeitsstunden Säule ist in Ordnung zu sehen, denn das von einer gebundenen Spalte ist. aber schauen Sie sich die ungebundene Spalte mit dem Namen "Total Work Hours" an (ich habe sie nur "Total Working Hours" genannt. Weil ich wirklich die Stundenanzahl in jeder Zeile benötige.), die Ergebnisse sind die gleichen. alle 15, weil ich meine Codes nicht korrekt ausführen kann, während ich diesen Code innerhalb der für jede Anweisung habe.

'------------LOOP DGV TO CALCULATE TOTAL HOURS PER ROW------------' 
For Each row As DataGridViewRow In DGVViewDaysDetailsForm.Rows 
    row.Cells("TotalWorkHoursPerDay").Value = CInt(TotalWorkingHours) 
Next 

es irgendwelche Art und Weise die row.Cells zu beziehen ("TotalWorkHoursPerDay"). Value = CInt (TotalWorkingHours) in meinem DGVViewDaysDetailsForm?

Weil jedes Mal, wenn ich das für jede entfernt und halten nur die row.Cells ("TotalWorkHoursPerDay") Value = CInt (TotalWorkingHours)

Ich habe Fehlercodes wie:. nicht die Parameter Spaltenname gefunden Can not Zeilen anzufügen, da die Datagridview gebunden ist Spalte nicht

existiert

Antwort

0
Private Sub dgv_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgv.CellValidating  

if e.RowIndex > -1 then 
Dim dteValue1 as Date = DateTime.Parse(dgv.item("TotalWorkingHoursTimeIn", e.RowIndex).Value) 
Dim dteValue2 as Date = DateTime.Parse(dgv.item("TotalWorkingHoursTimeOut", e.RowIndex).Value) 
dgv.Rows("TotalWorkHoursPerDay", e.RowIndex).Value = DateDiff(DateInterval.Hour, dteValue1, dteValue2).ToString() 
End if 

den obigen Code in der Zelle Validierung Ereignis Versuchen. Hoffe, das funktioniert

+0

Überladung Auflösung fehlgeschlagen, weil kein zugänglich 'Item' akzeptiert diese Anzahl von Argumenten. –

+0

Ok, es gibt einen anderen Weg, es zu tun. Ignoriere die DataReader-Schleife. Insgesamt und leiten Sie die Stunden in cell_validate eventHandler ab. 'Für jede Zeile als DataGridViewRow In DGVViewDaysDetailsForm.Rows Zeile.Zellen (" TotalWorkHoursPerDay "). Wert = CInt (TotalWorkingHours)' Nächste. Entferne dies und verwende die neue Antwort oben. – Leprechaun

+0

danke für die Hilfe, aber diese Lösung funktioniert auch nicht. –