ASP.NET Geschachtelte GridView, DataItem null zurück, in der Kinder-GridView das RowDataBound-Ereignis

In einer geschachtelten GridView (GridView innerhalb einer template-Spalte des übergeordneten GridView-Steuerelements). Ich bin verbindlich Kind GridView an eine DataTable in übergeordnete GridView-das RowDataBound-Ereignis. dieser funktioniert wie es sollte. Aber das problem bin ich vor ist in der Kinder-GridView das RowDataBound-Ereignis, wenn ich versuche, Zugriff auf die e.Zeile.DataItem-Eigenschaft gibt Sie null zurück. Ich erwarte Sie, um zurückzukehren, Typ DataRowView. die werde ich dann verwenden, um Werte von TextBox ist.

Eltern GridViewId = gvProductOptionGrps und
Kind GridViewId = gvProductOptions

Eltern GridViews RowDataBound-Ereignis.

    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
    }
Schreibe einen Kommentar