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

是否仅在GridView的最后一行显示可见复选框?

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

    是否可以只在编辑网格视图的最后一行时显示复选框?

    我在EditItemTemplate中尝试过类似的操作:

    <asp:CheckBox ID="chkNextDay" runat="server" 
                  ToolTip="Is it a next-day departure?"
                  Enabled="true" 
                  Checked='<%# DateTime.Parse(Eval("OutHour","{0:d}")).Date >
                               DateTime.Parse(Eval("InHour","{0:d}")).Date  %>'/>
    

    然后,在代码隐藏部分,我尝试将其隐藏到最后一行以外的其他行:

    protected void grvOutHour_RowEditing(object sender, GridViewEditEventArgs e)
            {
                GridView grvOutHour = (GridView)this.grvReport.Rows[grvReport.EditIndex].FindControl("grvOutHour");
                TextBox txtBox = (TextBox)grvOutHour.Rows[e.NewEditIndex].FindControl("txtEditOutHour");
                CheckBox nextDay = (CheckBox)grvOutHour.Rows[e.NewEditIndex].FindControl("chkNextDay");
                if (grvOutHour.Rows.Count-1 != e.NewEditIndex)
                    nextDay.Visible = false;
            }
    

    这几乎成功了,但是复选框一直显示在所有字段中,我想是因为行数据绑定在再次进行行编辑后被调用,所以它再次呈现整个内容:(

    有什么建议吗?

    谢谢, EtonB。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Josh Stodola    16 年前

    使用 RowDataBound 相反…

    protected void grvOutHour_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowState == DataControlRowState.Edit)
        {
            GridView grid = (GridView)sender;
            CheckBox nextDay = (CheckBox)e.Row.FindControl("chkNextDay");
            nextDay.Visible = (e.Row.RowIndex == (grid.Rows.Count - 1));
        }
    }
    
        2
  •  0
  •   Jack Marchetti    16 年前

    您需要处理在rowdatabound事件中隐藏复选框。

    显然,您需要确定最后一行是什么,并在条件为真时将复选框可见属性设置为真。

        3
  •  -1
  •   TeaDrivenDev    16 年前

    我想这更像是一个黑客而不是一个优雅的解决方案,但是如果条件是真的,我可能会通过javascript隐藏其他复选框。

    推荐文章