2011-01-08 8 views
1

ネストされたGridView(親GridViewのテンプレート列内のGridView)。子GridViewを親GridViewのRowDataBoundイベントのDataTableにバインドしています。これは必要に応じて動作します。しかし、私が直面している問題は、子GridViewのRowDataBoundイベントで、e.Row.DataItemプロパティにアクセスしようとするとnullが返されます。私はそれがDataRowView型を返すことを期待しています。 TextBoxの値を設定するために使用します。ASP.NETネストされたGridViewの場合、DataItemは子GridViewのRowDataBoundイベントでnullを返します。

親GridViewId = gvProductOptionGrpsと 子供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 [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 –

答えて

3

あなたは行がgvProductOptions_RowDataBound内のDataRowであるかどうかを確認するために忘れていました。ヘッダーにはDataItemがないため、nullです。

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

Ohhh!ありがとう、Tim。どのように私はそれを忘れましたか?とにかくもう一度ありがとう –

関連する問題