2014-03-25 55 views
0

在下面的代碼中,我獲取了arraylist中的所有id並將其存儲在sample.aspx中的會話中,並在test.aspx.Now中檢索會話值在頁面加載時將項目ID分配給DataSet dsField。如何單獨獲取該值。 sample.aspx從會話中檢索值並將其分配給變量

Button btnView = (Button)e.CommandSource; 
Label lblProjectId = (Label)btnView.Parent.FindControl("ProjectID"); 
Label lblBatchID = (Label)btnView.Parent.FindControl("BatchID"); 
Label lblImageID = (Label)btnView.Parent.FindControl("ImageID"); 
Label lblReasons = (Label)btnView.Parent.FindControl("Reasons"); 
Label lblLayerID = (Label)btnView.Parent.FindControl("LayerID"); 
Label lblStatusID = (Label)btnView.Parent.FindControl("StatusID"); 
Label lblProcessID = (Label)btnView.Parent.FindControl("ProcessID"); 
ArrayList SearchUrlValues = new ArrayList(); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblImageID); 
SearchUrlValues.Add(lblReasons); 
SearchUrlValues.Add(lblLayerID); 
SearchUrlValues.Add(lblStatusID); 
SearchUrlValues.Add(lblProcessID); 
Session["ProjectDetails"] = SearchUrlValues.ToArray(); 
Response.Write(SearchUrlValues); 

Test.aspx文件:

Array SearchUrlValues = (Array)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
     DataSet dsField = GetFieldData(10);//how to assign projectid instead of 10 
     gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
     gmasFieldsContr.EnumTable = dsField.Tables[1]; 
     gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
     gmasFieldsContr.BindData(); 
} 
public DataSet GetFieldData(int iProjectID) 
    { 
     try 
     { 
      SqlParameter[] SqlParam = new SqlParameter[1]; 

      SqlParam[0] = new SqlParameter("@i_ProjectID", SqlDbType.Int); 
      SqlParam[0].Value = iProjectID; 


      return ExecuteQuery(SqlParam, "spGetFieldData"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message.ToString()); 
     } 
    } 

回答

1

編輯

在Sample.aspx不SearchUrlValues存儲爲數組

Button btnView = (Button)e.CommandSource; 
Label lblProjectId = (Label)btnView.Parent.FindControl("ProjectID"); 
Label lblBatchID = (Label)btnView.Parent.FindControl("BatchID"); 
Label lblImageID = (Label)btnView.Parent.FindControl("ImageID"); 
Label lblReasons = (Label)btnView.Parent.FindControl("Reasons"); 
Label lblLayerID = (Label)btnView.Parent.FindControl("LayerID"); 
Label lblStatusID = (Label)btnView.Parent.FindControl("StatusID"); 
Label lblProcessID = (Label)btnView.Parent.FindControl("ProcessID"); 
ArrayList SearchUrlValues = new ArrayList(); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); 
SearchUrlValues.Add(lblImageID); 
SearchUrlValues.Add(lblReasons); 
SearchUrlValues.Add(lblLayerID); 
SearchUrlValues.Add(lblStatusID); 
SearchUrlValues.Add(lblProcessID); 
Session["ProjectDetails"] = SearchUrlValues; // Store it as ArrayList 
Response.Write(SearchUrlValues); 

然後進行測試。 aspx,將Session對象轉換爲ArrayList;

var SearchUrlValues = (ArrayList)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
    var projectId = int.Parse(SearchUrlValues[0].ToString()); 
    DataSet dsField = GetFieldData(projectId);//how to assign projectid instead of 10 
    gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
    gmasFieldsContr.EnumTable = dsField.Tables[1]; 
    gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
    gmasFieldsContr.BindData(); 
} 

順便說一下,請注意,您要添加兩次lblProjectId;

SearchUrlValues.Add(lblProjectId); // First 
SearchUrlValues.Add(lblBatchID); 
SearchUrlValues.Add(lblProjectId); // Second 

此外,我寧願使用一個對象來將這些值存儲在會話中。

public class SearchUrlValues 
{ 
    public int lblProjectId { get; set; } 
    public int lblBatchID { get; set; } 
    public int lblImageID { get; set; } 
    public int lblReasons { get; set; } 
    public int lblLayerID { get; set; } 
    public int lblStatusID { get; set; } 
    public int lblProcessID { get; set; } 
} 

然後,而不是arraylist;

var newSearchUrlValues = new SearchUrlValues() 
{ 
    lblProjectId = lblProjectId, 
    lblBatchID = lblBatchID, 
    lblImageID = lblImageID, 
    lblReasons = lblReasons, 
    lblLayerID = lblLayerID, 
    lblStatusID = lblStatusID, 
    lblProcessID = lblProcessID 
}; 

Session["ProjectDetails"] = newSearchUrlValues; 

並檢索它像;

var searchUrlValues = (SearchUrlValues)Session["ProjectDetails"]; 
var projectId = searchUrlValues.lblProjectId; 
+0

它會引發錯誤在VAR專案編號無法應用用[]索引,以類型的System.Array的表達式=(int)的SearchUrlValues [0]; – user3319384

+0

@ user3319384好的,我已經更新了答案。會話對象需要轉換爲ArrayList。 – coni2k

+0

它會在var SearchUrlValues =(ArrayList)Session [「ProjectDetails」]上拋出錯誤;無法投射'System.Object []'類型的對象來鍵入'System.Collections.ArrayList'。 – user3319384

0

嘗試像這樣

ArrayList SearchUrlValues = (ArrayList)Session["ProjectDetails"]; 

if (!IsPostBack) 
{ 
     DataSet dsField = GetFieldData(Convert.ToInt32(SearchUrlValues[0].ToString())); 
    //fetech 1st element of array List 
     gmasFieldsContr.dtFieldsInfo = dsField.Tables[0]; 
     gmasFieldsContr.EnumTable = dsField.Tables[1]; 
     gmasFieldsContr.RegularExpressionTable = dsField.Tables[3]; 
     gmasFieldsContr.BindData(); 
} 
public DataSet GetFieldData(int iProjectID) 
    { 
     try 
     { 
      SqlParameter[] SqlParam = new SqlParameter[1]; 

      SqlParam[0] = new SqlParameter("@i_ProjectID", SqlDbType.Int); 
      SqlParam[0].Value = iProjectID; 


      return ExecuteQuery(SqlParam, "spGetFieldData"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message.ToString()); 
     } 
    } 
+0

它引發錯誤無法將[]的索引應用於DataSet中的system.array類型的表達式dsField = GetFieldData(SearchUrlValues [0] .ToString()); – user3319384

+0

@ user3319384更新了我的答案 –

+0

它拋出錯誤onvar SearchUrlValues =(ArrayList)Session [「ProjectDetails」];無法將類型爲'System.Object []'的對象轉換爲鍵入'System.Collections.ArrayList' – user3319384

相關問題