во вложенном 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
}