为什么rowdatabound中的条件失败?

时间:2018-10-27 07:41:17

标签: c# asp.net c#-4.0 webforms

我试图显示一个按钮,其中IsPublished为true,它可以工作,但网格中的第一行除外。为什么?我已经尝试了很久了,但是根本没有用

protected void gvNITs_RowDataBound(object sender, GridViewRowEventArgs e)
{
    try
    {
        //LinkButton lb = e.Row.FindControl("btnLinkDownload") as LinkButton;
        //if (lb != null)
        //    ScriptManager.GetCurrent(this).RegisterPostBackControl(lb);

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton Lbtn_change = (LinkButton)e.Row.FindControl("Lbtn_change");
            HiddenField hdnPublishNITDate = e.Row.FindControl("hdnPublishedNITdate") as HiddenField;
            DateTime? dtPublishedNITDate = string.IsNullOrEmpty(hdnPublishNITDate.Value) == true ? null : (DateTime?)hdnPublishNITDate.Value.ToDate();
            HiddenField hdnIsPublishedNIT = e.Row.FindControl("hdnIsPublishedNITs") as HiddenField;
            bool IsPublished = hdnIsPublishedNIT.Value.ToBool();

            GridView gv = (GridView)sender;

            foreach (GridViewRow gvr in gv.Rows)
            {
                if (IsPublished == true)
                {
                    Lbtn_change.Visible = true;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

它不起作用,因为您有嵌套循环。将一行添加到GridView时会触发RowDataBound事件。但是在RowDataBound事件中,您循环了GridView foreach (GridViewRow gvr in gv.Rows)

中的所有行。

如果选中gv.Rows.Count,则会发现它在第一行中是0,因为它尚未添加到GridView中。

但是由于您已经可以访问Lbtn_change,因此无论如何您都不需要该循环。因此,请设置不带循环的Visible属性。