Почему условие в rowdatabound становится неудачным? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь показать кнопку, где 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 голосов
/ 27 октября 2018

Это не работает, потому что у вас есть вложенный цикл. Событие RowDataBound запускается при добавлении строки в GridView. Но в событии RowDataBound вы зацикливаете все строки в GridView foreach (GridViewRow gvr in gv.Rows)

Если вы отметите gv.Rows.Count, вы обнаружите, что в первом ряду он равен 0, поскольку он еще не добавлен в GridView.

Но вам все равно не нужен этот цикл, поскольку у вас уже есть доступ к Lbtn_change. Поэтому установите свойство Visible без цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...