【问题标题】:Auto Calculate datagridview自动计算datagridview
【发布时间】:2016-05-13 19:05:39
【问题描述】:

如何在datagridview中自动计算Column?

当您将公式设置为列时,类似于 microsoft excel 中的内容。

我有一个约会专栏和一个任期专栏。任期列应使用DateHired - DateToday 公式自动计算。

请帮忙。谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow!该站点不是代码编写服务。请花点时间重新阅读Help center 中的提问指南。
  • 如果您可以或可以合理地使用DataTable 作为数据源,那么您可以简单地设置DataColumnExpression 属性。
  • DateHired - DateToday?这不会造成负面日期或至少超出界限吗?这就像使用5 - 20 而不是可能想要的20 - 5
  • 不,它没有。我已经得到了公式,但问题是我不知道如何处理 datagridview。

标签: vb.net datagridview


【解决方案1】:

您可以使用以下语句来计算两个日期之间的年/月/日等等。

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

您可以传递任何有效日期来代替 DateTimePicker1.value 和 DateTimePicker2.value

您可以使用其他选项代替 DateInterval.Year,如下所示。

  • DayOfYear
  • 小时
  • 分钟
  • 季度
  • 第二
  • 工作日
  • WeekOfYear
  • 年份

要在 DataGridView 中使用上述功能,可以使用以下代码。

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

在上面的示例中,您将获得图像中提到的输出,当前日期为 5/7/2016

【讨论】:

  • 我应该把它放在哪里?我试图把它放在 cellendit 句柄中,但没有用。
  • 我添加了另一个显示代码和结果的图像。请不要忘记投票并标记答案
【解决方案2】:

您可以将 GridView 中的偶数 "CellEndEdit" 处理为:

   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

【讨论】:

  • 谢谢,但它没有用。 :( 我在文本框中临时使用了这个公式,它有效,但我需要在 Datagridview 列中自动计算它。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,任期为月数。
  • 好的,我已经编辑了我的答案,告诉我他是否为你工作。
  • 它有效,但我必须多次单击每个单元格才能显示答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多