2016-04-11 11 views
0

ヘッドメルトがあり、グリッドビューにバインドされる前のDatatableがセッションに保存されていないのはなぜですか?C#データテーブルがセッションに保存されていません

常にnullです。

ここに私のコードです。 Session["Data"] = dts;にはデータが含まれている必要があります。しかし、私はあなたのコードは私のために正常に動作

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
    PopulateProductClass(); 
    PopulateProduct();  
    } 
    PopulateOrderList();  
} 

private void PopulateOrderList() 
{ 
    DateTime d; 
    DateTime d2; 

    CustomerInfo ki = CustomerInfoProvider.GetCustomerInfoByUserID(CooneenHelper.GetUserImpersonisationID()); 
    int nKustomerID = ki.CustomerID; 
    DataTable dts = new DataTable(); 
    dts.Columns.Add("OrderDate", typeof(string)); 
    dts.Columns.Add("OrderNumber", typeof(string)); 
    dts.Columns.Add("OrderItemSKUName", typeof(string)); 
    dts.Columns.Add("SKUNumber", typeof(string)); 
    dts.Columns.Add("OrderItemStatus", typeof(string)); 
    dts.Columns.Add("OrderItemUnitCount", typeof(string)); 
    dts.Columns.Add("mtrx_Code2", typeof(string)); 

    QueryDataParameters qdp = new QueryDataParameters(); 
    qdp.Add("@CustomerID", nKustomerID); 

    if (drpProductClass.SelectedValue.ToString() != "0" || drpProductClass.SelectedValue.ToString() == null) { qdp.Add("@OrderItemWRClass", drpProductClass.SelectedItem.ToString()); } 
    if (drpProduct.SelectedValue.ToString() != "0") { qdp.Add("@OrderItemSKUID", drpProduct.SelectedValue.ToString()); }     
    if (txtStartDate.Text != "") { d = DateTime.Parse(txtStartDate.Text); qdp.Add("@OrderItemDateFrom", d.ToString("yyyy-MM-dd")); } 
    if (txtEndDate.Text != "") { d2 = DateTime.Parse(txtEndDate.Text); qdp.Add("@OrderItemDateTo", d2.ToString("yyyy-MM-dd")); } 

    DataSet ds = gc.ExecuteQuery("CN_GetOrderItemByCustID", qdp, QueryTypeEnum.StoredProcedure, true); 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
    DataRow drNew = dts.NewRow(); 
    drNew["OrderDate"] = ValidationHelper.GetDateTime(dr["OrderDate"], DateTime.Now).ToShortDateString(); 
    drNew["OrderNumber"] = dr["OrderNumber"].ToString(); 
    drNew["OrderItemSKUName"] = dr["OrderItemSKUName"].ToString(); 
    drNew["SKUNumber"] = dr["SKUNumber"].ToString(); 
    drNew["OrderItemStatus"] = dr["OrderItemStatus"].ToString(); 
    drNew["OrderItemUnitCount"] = dr["OrderItemUnitCount"].ToString(); 
    drNew["mtrx_Code2"] = dr["mtrx_Code2"].ToString(); 
    dts.Rows.Add(drNew); 
    } 

    //Clear the TextBox 
    litResults.Text = String.Empty; 

    if (dts.Rows.Count == 1) 
    litResults.Text = "" + dts.Rows.Count.ToString() + " Order Items"; 
    else 
    litResults.Text = "" + dts.Rows.Count.ToString() + " Order Items"; 

    gvOrderItems.Visible = true; 
    gvOrderItems.DataSource = dts.DefaultView;  
    gvOrderItems.DataBind(); 

    Session["Data"] = dts; 

    if (dts.Rows.Count > 1) litResults.Text += " - Showing page " + (gvOrderItems.PageIndex + 1).ToString() + " of " + gvOrderItems.PageCount.ToString(); 

} 
+1

はあなたがセッション変数を設定していることを確認するためにコードをステップました空でソートするGridView上のデータを抽出するために行くときエラーが発生してもセッターは実行されませんでしたか? try catchブロックはデバッグにも役立ちます。 – codemonkeyliketab

+0

こんにちはcodemkeyliketab yesは 'try catch'ブロックで試しましたが、エラーは報告されませんでした。私のデータテーブル 'dts'にデータが入っているのがわかります。しかし、セッションは常に空です – Kevin

+0

私はまた、私のセッション変数が通常の文字列値を保存できることに気付きました。しかし、いくつかのdatatableは保存されていないのですか? – Kevin

答えて

1

...

protected void Page_Load(object sender, EventArgs e) 
{ 
    PopulateOrderList(); 
} 

private void PopulateOrderList() 
{ 
    DateTime d; 
    DateTime d2; 
    DataTable dts = new DataTable(); 
    dts.Columns.Add("OrderDate", typeof(string)); 
    dts.Columns.Add("OrderNumber", typeof(string)); 
    dts.Columns.Add("OrderItemSKUName", typeof(string)); 
    dts.Columns.Add("SKUNumber", typeof(string)); 
    dts.Columns.Add("OrderItemStatus", typeof(string)); 
    dts.Columns.Add("OrderItemUnitCount", typeof(string)); 
    dts.Columns.Add("mtrx_Code2", typeof(string)); 

     DataRow drNew = dts.NewRow(); 
     drNew["OrderDate"] = DateTime.Now.ToShortDateString(); 
     drNew["OrderNumber"] = "122"; 
     drNew["OrderItemSKUName"] = "sku"; 
     drNew["SKUNumber"] = "skunum"; 
     drNew["OrderItemStatus"] = "Done"; 
     drNew["OrderItemUnitCount"] = "1290"; 
     drNew["mtrx_Code2"] ="abc123"; 
     dts.Rows.Add(drNew); 

    Session["Data"] = dts; 
    gridview.Visible = true; 
    gridview.DataSource = dts.DefaultView; 
    gridview.DataBind(); 


} 

protected void gridview_SortCommand(object source, DataGridSortCommandEventArgs e) 
{ 
    DataTable dt = (DataTable)Session["Data"]; 
} 
+0

私はそれがあなたのためにどのように働くのか分かりませんか? – Kevin

+0

解決策は正常に動作しました。なぜそれが動作していないのかまだ分かりません。たぶんセッション変数を呼び出すときに間違った構文を使用していたのでしょうか? – Kevin

関連する問題