代码之家  ›  专栏  ›  技术社区  ›  Eton B.

在C中对gridview进行复杂编辑#

  •  2
  • Eton B.  · 技术社区  · 16 年前

    我正在开发一个考勤系统,它有以下表格:

    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  +
    +---------+---------------------+-----------------------+
    

    我有以下网格视图:

    alt text

    我需要帮助来处理我的客户今天提出的请求。。。

    目前,当调用这个gridview时,“到达”和“离开”字段是通过查询数据库并将所有小时串成一个字符串然后打印出来来检索的。但是,我的客户现在希望能够修改“离开”列中的任何时间。我根本不知道如何处理这个请求,因为时间都集中在一个单元格中。我想在一个文本区域中显示小时数,但如果我这样做了,就不可能在数据库中正确应用更改。

    任何帮助都将非常感谢,因为我感到不知所措。

    提前谢谢你, 伊顿商学院。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Scott Mitchell    16 年前

    一种方法是允许更新以一种更加Ajaxy的方式进行,如亚里士多德所讨论的。这通常被认为是一种更加用户友好的方法,当然也会提供更好的用户体验,但需要熟悉jQuery和JavaScript,从您的角度来看,客户机和服务器之间的交互稍微复杂一些。

    如果您想继续使用Web控件范例,请考虑将“到达”和“离开”字段设置为模板字段。在ItemTemplate中,可以继续显示在数据库中连接的文本,但是在EditItemTemplate中放置了一个GridView。此GridView可以绑定到数据源控件(也在EditItemTemplate中)并配置为支持编辑。如果您以编程方式绑定数据(即 不 使用数据源控件),则每当父行变为可编辑时,都需要将数据绑定到子GridView。这可以使用如下标记以声明方式完成:

    <asp:TemplateField ...>
        <EditItemTemplate>
            <asp:GridView runat="server" id="gvChild" DataSource='<%# SomeFunction() %>' ...>
               ...
            </asp:GridView>
        </EditItemTemplate>
    </asp:TemplateField>
    

    在这里, SomeFunction

    或者,可以通过父GridView的 RowDataBound 事件处理程序。也就是说,您将检查是否正在处理正在编辑的行(即,如果 e.Row.RowIndex = ParentGridViewID.EditIndex ). 如果是,您可以使用 e.Row.FindControl("ChildGridViewID") 然后设置 DataSource 属性并调用其 DataBind 方法。

        2
  •  1
  •   Aristos    16 年前

    我也是这样做的。

    <span id="HourID_445" onclick="EditMe(this);">17:42:51</span>
    

    现在,当您单击此小时时,您将使用jQuery打开一个iframe对话框,并发送您已单击的范围的ID,其中包含您需要编辑的小时的ID。这样,您就有了ID,在iframe中有了一个简单的.aspx对话框,您进行编辑,按OK,保存它,然后在保存之后,您还将范围更新回表中。

    这里的关键是将小时的ID隐藏在一个span元素中,然后使用Javascript获得它。

    如果我不清楚,请问我更多的信息。

    没有jQuery

    有幻灯片: http://highslide.com/

    看这个例子 http://highslide.com/examples/iframe.html

    你可以用hislide,每次都用这个简单的线。

    <a href="EditTime.aspx?TimeID=23" 
        onclick="return hs.htmlExpand(this,{objectType:'iframe'} )">23:00:00</a>
    
        3
  •  0
  •   Ryan    16 年前

    遗憾的是,我认为这是目前的成就并不能使这种改变变得容易的要求之一。事件最简单的请求可以显示在设计时所做的疏忽。

    P、 说真的,我感觉到你的痛苦。