2016-05-06 5 views
1

Wie automatisch Spalte in Datagridview berechnen?Auto Calculate datagridview

Etwas wie in Microsoft Excel, wenn Sie eine Formel in eine Spalte setzen.

Ich habe ein Datum gemietet Spalte und eine Amtszeit Spalte. Die Tenure-Spalte sollte automatisch mit einer DateHired - DateToday Formel berechnet werden.

bitte helfen. Danke.

+0

Willkommen erwähnt bekommen! Diese Website ist kein Code-Schreibdienst. Bitte nehmen Sie sich einen Moment Zeit, um die Richtlinien zum Stellen von Fragen hier in der [Hilfe] (http://stackoverflow.com/help) erneut zu lesen. –

+0

Wenn Sie eine 'DataTable' als Datenquelle verwenden oder vernünftigerweise verwenden können, können Sie einfach die 'Expression'-Eigenschaft dieser' DataColumn' festlegen. – jmcilhinney

+0

'DateHired - DatumHeute'? Wäre das nicht ein negatives Datum oder zumindest außerhalb der Grenzen? Es ist, als würde man "5 - 20" statt der wahrscheinlich gewünschten "20 - 5" nehmen. –

Antwort

0

Sie können die sogar "CellEndEdit" in Ihrem Gridview Händel:

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     DataGridView1.Columns.Add("DateHired", "DateHired") 
     DataGridView1.Columns.Add("tenure", "tenure") 

    End Sub 
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit 
     Try 
      Dim order As DataGridView = DirectCast(sender, DataGridView) 

      If IsDate(order("DateHired", e.RowIndex).Value) Then 
       'Dim dt As Date = order("DateHired", e.RowIndex).Value 
       Dim dt1 As Date = order("DateHired", e.RowIndex).Value 
       Dim dt2 As Date = Date.Parse(DateTime.Now) 
       ' order("tenure", e.RowIndex).Value = DateDiff(DateInterval.Year, dt, Date.Now) 
       order("tenure", e.RowIndex).Value = Math.Abs(CInt(dt1.Subtract(dt2).TotalDays/30)) 
      End If 

     Catch ex As Exception 

     End Try 
    End Sub 
    Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged 

     Dim dt1 As Date = Date.Parse(DateTimePicker1.Text) 
     Dim dt2 As Date = Date.Parse(DateTime.Now) 
     txtTenure.Text = Math.Abs(CInt(dt1.Subtract(dt2).TotalDays/30)) 
    End Sub 
+0

danke, aber es hat nicht funktioniert. :(i verwenden diese Formel vorübergehend in Textbox und es hat funktioniert, aber was ich brauche, ist die automatische es in einem Datagridview Spalte berechnen. Private Sub DateTimePicker1_ValueChanged (Absender als Gegenstand, e As EventArgs) Griffe DateTimePicker1.ValueChanged Dim DT1 As Date = Date.Parse (DateTimePicker1.Text) Dim dt2 Wie Date = Date.Parse (DateTime.Now) txtTenure.Text = Math.Abs ​​(CInt (dt1.Subtract (dt2).TotalDays/30)) End Sub und die Amtszeit ist die Anzahl der Monate. – catchyourwaves

+0

Ok ich habe meine Antwort bearbeiten Sag mir, wenn er für dich arbeitet. –

+0

es funktionierte, aber ich muss jede Zelle mehrmals klicken, um die Antwort zu zeigen. – catchyourwaves

0

können Sie folgende Anweisung verwenden zu berechnen Jahre/Monate/Tage und viele mehr zwischen zwei Terminen.

LblDateDiff.Text = DateDiff(DateInterval.Year, DateTimePicker1.Value, DateTimePicker2.Value) 

können Sie bestanden alle gültiges Datum anstelle von DateTimePicker1.value & DateTimePicker2.value

Sie weitere Optionen anstelle von DateInterval.Year diejenigen sind wie folgt verwenden können.

  • Tag
  • DayOfYear
  • Stunden
  • Minute
  • Monat
  • Quarter
  • Zweite
  • Weekday
  • WeekOfYear
  • Jahr

Um die obige Funktion in DataGridView zu verwenden, können Sie den folgenden Code verwenden.

Dim ds As New DataSet 
qry = "select * from TblDate" 
Dim da As New SqlDataAdapter(qry, con) 
da.Fill(ds) 
If ds.Tables(0).Rows.Count > 0 Then 
DataGridView1.DataSource = ds.Tables(0) 
DataGridView1.Columns.Add("Days", "Days") 
For i = 0 To DataGridView1.Rows.Count - 1 
    With DataGridView1.Rows(i) 
     .Cells(1).Value = DateDiff(DateInterval.Day, .Cells(0).Value, Today.Date) 
    End With 
Next 

In obigem Beispiel werden Sie Ausgang in dem Bild mit dem aktuellen Datum als 5/7/2016 enter image description here

enter image description here zu Stack-Überlauf

+0

Wo soll ich es hinstellen? Ich habe versucht, es in cellernedit behandeln, aber es hat nicht funktioniert. – catchyourwaves

+0

Ich habe ein weiteres Bild hinzugefügt, das den Code und das Ergebnis zeigt. Vergessen Sie nicht, zu antworten und die Antwort zu markieren – Ravi