ASP.NET Nested GridView, DataItem возвращает значение null в дочернем событии RowDataBound GridView - PullRequest
1 голос
/ 08 января 2011

во вложенном GridView (GridView внутри столбца шаблона родительского GridView).Я связываю дочерний GridView с DataTable в событии RowDataBound родительского GridView.это работает как надо.Но проблема, с которой я сталкиваюсь, заключается в событии RowDataBound объекта Child GridView, когда я пытаюсь получить доступ к свойству e.Row.DataItem, оно возвращает нуль.Я ожидаю, что он вернет DataRowView Type.который я затем буду использовать для установки значений TextBox.

Parent GridViewId = gvProductOptionGrps и Child GridViewId = gvProductOptions

Родительское событие GridViews RowDataBound.

    protected void gvProductOptionGrps_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //ProductOptionGrps
            TextBox txtProductOptionGrpSortOrder = (TextBox)e.Row.FindControl("txtProductOptionGrpSortOrder");
            Label lblProductOptionGrpName = (Label)e.Row.FindControl("lblProductOptionGrpName");
            DataRowView drv = (DataRowView)e.Row.DataItem;

            txtProductOptionGrpSortOrder.Text = drv["SortOrder"].ToString();
            lblProductOptionGrpName.Text = drv["Name"].ToString();

            //ProductOptions
            SqlCommand sqlCmd = new SqlCommand();
            sqlCmd.CommandText = "SELECT a.ProductOptionId,a.SortOrder,b.Name,b.PriceGBP" +
                                 " FROM ProductOptionGrpProductOptions a" +
                                 " INNER JOIN ProductOptions b ON a.ProductOptionId=b.ProductOptionId" +
                                 " WHERE a.ProductOptionGrpId=@ProductOptionGrpId" +
                                 " ORDER BY a.SortOrder";
            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.Parameters.Add("@ProductOptionGrpId", SqlDbType.UniqueIdentifier).Value = new Guid(drv["ProductOptionGrpId"].ToString());
            _fl.ConnectToSQLServer();
            sqlCmd.Connection = _fl.GetActiveSQLServerConnection();

            DataTable dtProductOptions = new DataTable();
            dtProductOptions.Load(sqlCmd.ExecuteReader());

            GridView gv = (GridView)e.Row.FindControl("gvProductOptions");
            gv.DataSource = dtProductOptions;
            gv.DataBind();
            _fl.DisconnectFromSQLServer();
        }
    }

    protected void gvProductOptions_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        TextBox txtProductOptionSortOrder = (TextBox)e.Row.FindControl("txtProductOptionSortOrder");
        TextBox txtPriceGBP = (TextBox)e.Row.FindControl("txtPriceGBP");
        DataRowView drv = (DataRowView)e.Row.DataItem;//returns null

        txtProductOptionSortOrder.Text = drv["SortOrder"].ToString();//Error
        txtPriceGBP.Text = drv["PriceGBP"].ToString();//Error
    }

1 Ответ

3 голосов
/ 08 января 2011

Вы забыли проверить, является ли строка строкой данных в gvProductOptions_RowDataBound.Заголовок не имеет DataItem, поэтому он имеет значение null.

if (e.Row.RowType == DataControlRowType.DataRow)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...