2016-11-23 84 views
2

我在數據庫中有2個表。一個是用戶,另一個是社團。類似這樣的: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 

UserID有一個來自Users表的ID的外鍵。

和2種形式:用戶的登錄面板和顯示在Datagridview社團中的登錄面板。

現在,我試圖弄清楚,當我與用戶登錄時,只顯示具有該用戶的特定用戶ID的社團。

我在第二個表格中顯示了這個方法來顯示特定的社團,但是我不知道要在等號括號內放置什麼。我嘗試了很多可能性,但沒有任何工作...

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

你只需要從文本文件或XML之類的地方檢索您的登錄用戶標識。 –

+0

我不使用網絡服務。 – Raul

+0

基本上你正在登錄窗體和程序類中存儲一個用戶對象,用戶窗體沒有線索回答你需要將用戶對象傳遞給用戶窗體構造函數的用戶對象成爲可用'代碼'public frmUsers(User已記錄用戶) { 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); 
     ...