我试图显示一个按钮,其中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;
}
}
}
}
}
答案 0 :(得分:0)
它不起作用,因为您有嵌套循环。将一行添加到GridView时会触发RowDataBound
事件。但是在RowDataBound事件中,您循环了GridView foreach (GridViewRow gvr in gv.Rows)
如果选中gv.Rows.Count
,则会发现它在第一行中是0
,因为它尚未添加到GridView中。
但是由于您已经可以访问Lbtn_change
,因此无论如何您都不需要该循环。因此,请设置不带循环的Visible属性。