如何创建会话变量而不知道要创建多少个?

时间:2012-06-22 20:51:47

标签: c# sql-server visual-studio-2010 gridview checkbox

首先,我使用的是Visual Studio 2010(Visual C#)和ASP.NET。

我正在使用GridView显示我公司当前的未平仓头寸。我有一列复选框,申请人可以查看他们想要申请的职位。为了消除重复数据,我在三个主表(POSITION,APPLICANT和APPLICATION)之间创建了一个链接表。它仅由每个表中的主键组成,因此如果一个人申请3个职位,我们将不会有3个整个申请进行筛选。

我需要选择所选位置的PositionID,并将它们存储在会话变量中供以后使用。

我的问题是,如何在不知道检查了多少的情况下这样做?我不想只创建一堆不会被使用的不必要的变量。我想我将不得不使用foreach循环,但在循环中,我不知道如何告诉它创建一个新的会话变量并将ID存储在其中。

我当然希望这个问题有道理。如果您需要澄清,请告诉我。

1 个答案:

答案 0 :(得分:2)

您可以创建List<int>或任何数据类型PositionID,并将其存储在会话变量中。

实际上,我会在控件或页面中创建一个属性

public List<int> SelectedPositionIDList
{
   get
   {
        if(Session["SelectedPositions"] != null)
          return Session["SelectedPositions"] as List<int>;
        return new List<int>();
   }
   set
   {
      Session["SelectedPositions"] = value;
   }
}

您可以遍历位置ID列表,

foreach(int positionId in SelectedPositionIdList)
{
   //Do something.
}

当然,您需要在想要保存或执行某些操作时从gridview中获取ID。您可以通过基于您的实现循环遍历gridview行来实现。像下面的东西。

List<int> positions = new List<int>();

foreach(GridviewRow row in gdPositions)
{
    CheckBox cb = row.FindControl("checkbox") as CheckBox;
    if(cb != null && cb.Checked)
      positions.Add(/*find position id from row here*/);
}

if(positions.Count > 0)
    Session["SelectedPositionIdList"] = positions;