仅在Gridview最后一行的可见复选框?

时间:2010-10-26 15:34:33

标签: c# asp.net gridview row

是否可以在编辑GridView的最后一行时显示一个仅显示的复选框?

我在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;
        }

这个ALMOST工作,但是复选框一直显示所有字段,我认为因为RowDataBound再次被称为AFE RowEditing所以它再次呈现整个事物:(

有什么建议吗?

谢谢, EtonB。

3 个答案:

答案 0 :(得分:3)

使用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));
    }
}

答案 1 :(得分:0)

您需要处理隐藏RowDataBound事件中的复选框。

您需要确定最后一行是什么,并在该条件为真时将checkboxes visible属性设置为true。显然。

答案 2 :(得分:-1)

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