DataTable
に格納されているSession
に問題があり、このコードをSession
から取得するとコードが実行されます。たぶん、これは問題ではなく、インスタンスと参照が実際にどのように機能するかを間違って理解しているだけかもしれません。C#DataTableの複数のインスタンスがセッションに格納されています。
私はログインしたユーザーのすべてのデータを格納するPOCOクラスUser
を持っています。ユーザーは(ログインページ上)に記録されたら、私はUser
クラスのインスタンスを作成し、私はSession["User"]
にログインから取得したすべてのデータを格納
public class User
{
public int UserID { get; set; }
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
public DataTable UserRights { get; set; }
}
:
User _user = new User();
_user = MyLogin.GetUser() // method returns filled User object with data from db
Session["User"] = _user; // I store it into session
POCOクラスは次のようになりその後、私は(データテーブルに格納されている)ユーザー権利のセッションからのデータを必要とする私のページに私がセッションに見て、DataTableを取得:
User _currUser = (User)Session["User"];
DataTable dt = new DataTable();
dt = _currUser.UserRights;
このコード私はDataTable UserRightsのセッションを見て同じページ上で複数回回してみると、奇妙な動作が始まります。
例:ページに2つのユーザーコントロールがあり、それぞれの1つでは、上記のコードのようにDataTableのセッションを調べます。その後、私は、例えば、このようなユーザーコントロールコードのいずれかでDataTableオブジェクトのインスタンスを変更する場合:
dt.Columns.Remove("RoleID");
...第2のユーザ制御の変化の影響インスタンスすぎる(??)。インスタンスに異なる名前を与えた場合と同じになります:これが起こっているとインスタンスと参照が、この例ではどのように機能するか(それは私がそれらを正しく理解していないに見えます)なぜ
// FirstUserControl.ascx.cs
User _currUser1 = (User)Session["User"];
DataTable dt1 = new DataTable();
dt1 = _currUser1.UserRights;
dt1.Columns.Remove("RoleID")
// SecondUserControl.ascx.cs
User _currUser2 = (User)Session["User"];
DataTable dt2 = new DataTable();
dt2 = _currUser2.UserRights; <--- dt2 is without column "RoleID" too!?
は、明確な方法で誰かが私に説明することができます
。私はいつも、私が上記のようなコードを実行すると、それらを処理するときに何も共通しないdt1
と
dt2
DataTable
オブジェクトを得るだろうと思っていました。