行中的 Gridview 计算字段

Posted

技术标签:

【中文标题】行中的 Gridview 计算字段【英文标题】:Gridview Calculated Field in Row 【发布时间】:2015-04-14 20:38:58 【问题描述】:

我正在使用链接到 SQL 数据库的 Visual Studio 2010 和 Visual Basic。我有一个 Gridview,我想在其中有一个计算字段,我们称之为 NoHoursOff,基于该行中的字段 - BeginTimeOff 和 EndTimeOff。

在做了一些研究之后,我了解到我应该使用 TemplateField。我只是不明白这是如何工作的。我试过没有成功:

<asp:TemplateField HeaderText="Total Hours" >
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# "EndTimeOff" - "BeginTimeOff" %>' Width="100px"></asp:Label>>
            </ItemTemplate>
        </asp:TemplateField>

我也尝试用 "EndTimeOff".subtract("BeginTimeOff") 替换 Text 值,这适用于另一个网页。我不明白如何做一个计算字段!请帮忙,或者你能指导我到一个可以向我解释这个的教程。

【问题讨论】:

【参考方案1】:

你需要像这样在代码隐藏中创建一个函数

public string getValue(object BeginTimeOff, object EndTimeOff)
    
        return (Convert.ToDateTime(EndTimeOff.ToString()) - Convert.ToDateTime(BeginTimeOff.ToString())).ToString();
    

Label这个

Text=<%# getValue(Eval("BeginTimeOff"), Eval("EndTimeOff")) %>

然后只需设置您想要在方法中显示的格式(n 天、hh.mm.ss 等)以满足您的要求

【讨论】:

谢谢!我正在使用 Visual Basic。你能帮我转换一下代码吗?它在转换器中不起作用。谢谢! 尝试任何一个 DateTime.Parse() 或 DateTime.ParseExact() 【参考方案2】:

根据您的建议,我无法使其正常工作。这是我的 aspx 和 vb 代码:

<asp:TemplateField HeaderText="TotalHours2" >
        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# getValue(Eval("BeginTimeOff"), Eval("EndTimeOff")) %>' Width="100px"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>  

Public Function getValue(BeginTimeOff As Object, EndTimeOff As Object) As String
            Return (DateTime.Parse(EndTimeOff.ToString()) - DateTime.Parse(BeginTimeOff.ToString())).ToString()
End Function

我尝试将 C# 转换为 VB 可能有问题。感谢你的帮助! (仅供参考-我确实使用您的示例获得了另一个功能-只是不是这个新功能。如果您想查看代码,我会向您展示。它计算两个日期之间的天数,不包括周末和节假日。谢谢百万帮助我解决了这个问题!)

【讨论】:

你得到的错误是什么?你能编译代码没有错误吗?我认为,如果您尝试使用 Convert.ToDateTime(EndTimeOff.ToString()) 而不是 DateTime.Parse(EndTimeOff.ToString()) 它最终可以工作 对于代码 - 返回 (Convert.ToDateTime(EndTimeOff.ToString()) - Convert.ToDateTime(BeginTimeOff.ToString())),我得到的字符串未被识别为有效的 DateTime。在我运行代码之前的错误中,我看到“'System.TimeSpan' 类型的值无法转换为 'String'。” 我要创建另一个帖子,因为我想出了我想做的一部分。感谢您的帮助!

以上是关于行中的 Gridview 计算字段的主要内容,如果未能解决你的问题,请参考以下文章

如何从 aspx 中的 Gridview 行中检索主键以在 userControl.ascx 中使用?

将 gridview 模板字段文本框 id 传递给 javascript 函数

gridview 验证中的文本框

有啥方法可以在不同的行中显示 GridView 的列?

如何在Gridview中将行合并到行中

如何取得gridview中选中行中的某一字段