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
}
- Sollten Sie bearbeitet haben Ihre ursprüngliche Frage, anstatt einen neuen zu erstellen. Es wäre verschoben worden, wenn Sie bearbeitet wurde. stackoverflow.com/questions/4626621/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie vergessen, zu überprüfen, ob die Zeile eine DataRow in
gvProductOptions_RowDataBound
. Der Header muss nicht ein DataItem es ist daher null.