2016-11-23 8 views
2

データベースに2つのテーブルがあります。 1つはユーザと、もう1つは社会と一緒です。このようなもの:C#テーブルから特定の行を表示

Users table:    Societies table: 
ID User Pass   ID UserID Societies 
1 Mark 123    1  1  Pepsi 
2 John abc    2  1  Lays 
3 Paul a1b    3  2  Unilever 
          4  3  Nestle 

ユーザーIDには、ユーザーテーブルからIDへの外部キーがあります。

2つのフォーム:ユーザー用のログインパネルと、Datagridviewソーシャルで表示するログインパネル。

ここで、私はユーザーと一緒にログインしているときに、特定のユーザーIDを持つSocietiesのみを表示しようとします。

私は特定の社会を示すためにこの方法をSecond Formで作ったが、私は何を括弧で囲むべきか分からない。あなたはいくつかのヒントを持っている場合は、私にパスを与えてください...

private void btnLoad_Click(object sender, EventArgs e) 
{ 
    DCApp db = DCApp.NewDC(); 

    User logedUser = db.Users.FirstOrDefault(s => s == Program._us); 

    List<Society> ListSociety = db.Societies.Where(s => s.UserID.Equals(logedUser)).ToList(); 

    _bs.DataSource = ListSociety; 
    dgwUser.DataSource = _bs; 
    dgwUser.Refresh(); 
    _bs.ResetBindings(false);  
} 

を私は多くの可能性を試してみましたが、何も働きました。私のコードの

レクリエーション:

Program.csの

using System; 
using System.Windows.Forms; 

namespace Users 
{ 
static class Program 
{ 
    public static User _us; 
    [STAThread] 
    static void Main() 
    { 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    frmLogin f = new frmLogin(); 
    if (f.Run(out _us)) 
    { 
    Application.Run(new frmUsers()); 
    } 
    else 
    { 
    Application.Exit(); 
    } 
    } 
} 
} 

frmLogin.cs

namespace Users 
{ 
public partial class frmLogin : Form 
{ 
    bool _Result = false; 
    User _user; 

    public frmLogin() 
    { 
    InitializeComponent(); 
    } 
    internal bool Run(out User us) 
    { 
    us = _user; 
    ShowDialog(); 
    return _Result; 
    } 

    private void btnLogin_Click(object sender, EventArgs e) 
    { 
    if (cmdPassword.Text.Length == 0 || cmdUser.Text.Length == 0) 
    { 
    errH.SetError(btnLogin, "!"); 
    return; 
    } 
    using (DCApp db = DCApp.NewDC()) 
    { 
    List<User> logInP = db.Users.Where(s => s.UserPassword.ToLower().Equals(cmdPassword.Text.ToLower().Trim()) && s.UserName.ToLower().Equals(cmdUser.Text.ToLower())).ToList(); 
    if (logInP.Count == 0) 
    { 
    _Result = false; 
    } 
    else if (logInP.Count > 1) 
    { 
    _Result = false; 
    } 
    else 
    { 
    _Result = (bool) logInP.FirstOrDefault().IsActive; 
    _user = logInP.First(); 
    } 
    } 
    Close(); 
    } 

    private void btnCancel_Click(object sender, EventArgs e) 
    { 
    Application.Exit(); 
    } 
} 
} 

frmUsers.cs

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Linq; 
using System.Windows.Forms; 

namespace Users 
{ 
public partial class frmUsers : Form 
{ 
    BindingSource _bs = new BindingSource(); 

    public frmUsers() 
    { 
    InitializeComponent(); 
    InitControls(); 
    } 
    private void InitControls() 
    { 
    dgwUser.AutoGenerateColumns = false; 
    } 
    private void btnLoad_Click(object sender, EventArgs e) 
    { 
    DCApp db = DCApp.NewDC(); 

    User logedUser = db.Users.FirstOrDefault(s => s == Program._us); 

    List<Society> ListSociety = db.Societies.Where(s => s.UserID.Equals(logedUser)).ToList(); 

    _bs.DataSource = ListSociety; 
    dgwUser.DataSource = _bs; 
    dgwUser.Refresh(); 
    _bs.ResetBindings(false);  
    } 
} 
} 
+0

「_bs」とは何ですか? – Eldeniz

+0

'gwUser.DataSource = ListSociety'を確認できますか – Eldeniz

+0

' .Where(s => s.UserID.Equals(UserIdOfLoggedInUser)) 'のようなものを使う必要があります。しかし、 'UserIdOfLoggedInUser'を見つける方法はあなたのコードをすべて見ないためです。 –

答えて

0

だと思います!これは私がやったことです:frmLogin.cs

... 
    internal bool Run(out User user) 
    {  
    ShowDialog(); 
    user = _user; 
    return _Result; 
    } 
... 

そしてfrmUsers.cs

private void btnLoad_Click(object sender, EventArgs e) 
    { 
    DCApp db = DCApp.NewDC(); 

    User logedUser = db.Users.FirstOrDefault(s => s == Program._user); 

    List<Society> ListSociety = db.Societies.Where(s => s.UserID == logedUser.ID).ToList(); 

    _bindingSource.DataSource = ListSociety; 
    dgwUser.DataSource = _bindingSource; 
    dgwUser.Refresh(); 
    _bindingSource.ResetBindings(false);  
    } 

中で

アドバイスのためのみんなありがとう!

0

あなたがasp.netメンバーシップを使用していますプロバイダ?はい、あなたは、IDを取得するには以下のコードを使用することができた場合:

MembershipUser user = Membership.GetUser(); 
string id = user.ProviderUserKey.ToString(); 
+0

を参照してくださいログインしたユーザーIDをテキストファイルやXMLのような場所から取得するだけで済みます。 –

+0

私はWebサービスを使用しません。 – Raul

+0

基本的には、ログインフォームとプログラムクラスにユーザーオブジェクトを格納しています。ユーザーフォームには、ユーザーオブジェクトをユーザーに渡す必要があるユーザーオブジェクトはありません。フォームコンストラクターが利用できるようになりました。 'code' public frmUsers loggedUser) { InitializeComponent(); InitControls(); } –

0

私はこの問題は、私は問題を解決しdgwUser.AutoGenerateColumns = false;

どちらか

private void InitControls() 
    { 
    dgwUser.AutoGenerateColumns = true; 
    } 

それとも

private void AddColumns() 
    { 

     var col1 = new DataGridViewTextBoxColumn(); 
     var col2 = new DataGridViewCheckBoxColumn(); 
     var col3 = new DataGridViewCheckBoxColumn(); 

     col1.HeaderText = "YourHeaderText"; 
     col1.Name = "ID"; 

     col2.HeaderText = "YourHeaderText"; 
     col2.Name = "UserID"; 

     col3.HeaderText = "YourHeaderText"; 
     col3.Name = "Socities"; 

     dgwUser.Columns.AddRange(new DataGridViewColumn[] {col1,col2,col3}); 
    } 




    ... 
     List<Society> ListSociety = db.Societies.Where(s => s.UserID.Equals(logedUser.ID)).ToList(); 
     _bs.DataSource = ListSociety; 
     dgwUser.DataSource = _bs; 
     AddColumns(); 
     dgwUser.Refresh(); 
     _bs.ResetBindings(false); 
     ... 
関連する問題