我正在开发一个包含下表的考勤系统:
Entry
+---------+-----------+
+ EntryID + EntryDate +
+---------+ ----------+
Hour
+---------+--------+---------+
+ EntryID + InHour + OutHour +
+---------+--------+---------+
使用以下示例数据:
Entry
+---------+---------------------+
+ EntryID + EntryDate +
+---------+---------------------+
+ 1 + 1/1/2010 8:00:00 AM +
+ 2 + 1/1/2010 8:01:02 AM +
+---------+---------------------+
Hour
+---------+---------------------+-----------------------+
+ EntryID + InHour + OutHour +
+---------+---------------------+-----------------------+
+ 1 + 1/1/2010 8:00:00 AM + 1/1/2010 1:00:00 PM +
+ 1 + 1/1/2010 2:04:00 PM + 1/1/2010 6:03:00 PM +
+ 2 + 1/1/2010 8:01:02 AM + 1/1/2010 1:02:00 PM +
+---------+---------------------+-----------------------+
我有以下 GridView :
我需要有关如何处理客户今天完成的请求的帮助...
目前,当调用此 gridview 时,“到达”和“离开”字段是通过查询数据库并将所有小时连接成一个字符串然后打印出来来检索的。但是,我的客户现在希望能够修改“离开时间”列中的任何时间。我根本不知道如何处理这个请求,因为时间被组合在一个单元格中。我想过在文本区域中显示小时数,但如果我这样做,更改将无法正确应用到数据库。
任何帮助将不胜感激,因为我对此感到不知所措。
提前致谢, 伊顿 B.
最佳答案
一种方法是允许以更 Ajaxy 的方式进行更新,正如 Aristos 所讨论的那样。这通常被认为是一种对用户更友好的方法,肯定会提供更好的用户体验,但需要熟悉 jQuery 和 JavaScript,并且从您的角度来看,客户端和服务器之间的交互稍微复杂一些。
如果您想继续使用 Web 控制范例,请考虑将“到达”和“离开”字段设为 TemplateFields。在 ItemTemplate 中,您可以继续显示在数据库中连接的文本,但您需要在 EditItemTemplate 中放置一个 GridView。此 GridView 可以绑定(bind)到数据源控件(也在 EditItemTemplate 中)并配置为支持编辑。如果您以编程方式绑定(bind)数据(即,您不使用数据源控件),那么只要父行变得可编辑,您就需要将数据绑定(bind)到子 GridView。这可以使用标记以声明方式完成,如下所示:
<asp:TemplateField ...>
<EditItemTemplate>
<asp:GridView runat="server" id="gvChild" DataSource='<%# SomeFunction() %>' ...>
...
</asp:GridView>
</EditItemTemplate>
</asp:TemplateField>
在这里,SomeFunction
将是您的代码隐藏类中的一个函数(通常),它返回要绑定(bind)到网格的数据。
或者,您可以通过父 GridView 的 RowDataBound
事件处理程序以编程方式将数据绑定(bind)到子 GridView。即,您将检查是否正在处理正在编辑的行(即,如果 e.Row.RowIndex = ParentGridViewID.EditIndex
)。如果是这样,您可以使用 e.Row.FindControl("ChildGridViewID")
以编程方式引用子 GridView,然后设置其 DataSource
属性并调用其 DataBind
方法。
当用户单击父网格的“编辑”按钮时,“到达”和“离开”单元格将显示为带有自己的编辑按钮以修改各个时间的网格。或者,如果您想让用户编辑“到达”和“离开”时间而不要求用户先选择编辑父记录,则可以将子可编辑 GridView 放在 ItemTemplate 中。
关于c# - 在 C# 中对 gridview 进行复杂编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3936389/