2011-01-08 121 views
1

在嵌套的GridView(父GridView的模板列內的GridView)中。我將子GridView綁定到父GridView的RowDataBound事件中的DataTable。這是應該的。但我面臨的問題是在Child GridView的RowDataBound事件中,當我嘗試訪問e.Row.DataItem屬性時,它返回null。我期待它返回DataRowView類型。我將用它來設置TextBox的值。ASP.NET嵌套的GridView中,DataItem在子GridView的RowDataBound事件中返回null

父GridViewId = gvProductOptionGrps和 兒童GridViewId = gvProductOptions

父GridView的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 [email protected]" + 
           " 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 
    } 
+0

您應該編輯了原始問題而不是創建新問題。如果你編輯過它,它會被推高。 http://stackoverflow.com/questions/4626621/dataitem-is-null-in-nested-gridviews-rowdatabound-event – 2011-01-08 15:09:01

回答

3

你已經忘記檢查,如果該行是在gvProductOptions_RowDataBound一個DataRow。標題沒有DataItem,因此它是空的。

if (e.Row.RowType == DataControlRowType.DataRow) 
+0

哦!謝謝蒂姆。我怎麼忘記了它?無論如何謝謝你再次 – 2011-01-09 11:18:41