2016-11-23 5 views
2

Ich habe 2 Tabellen in einer Datenbank. Einer ist mit Benutzern und ein anderer mit Gesellschaften. Etwas wie dieses:C# Zeige bestimmte Zeilen aus einer Tabelle

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 

BenutzerID haben einen Fremdschlüssel zu ID von Benutzer Tabelle.

Und 2 Formen: Ein Login-Panel für Benutzer und man in einer Datagridview Gesellschaften anzeigen.

Jetzt versuche ich herauszufinden, wenn ich mich mit einem Benutzer anmelde, um nur Gesellschaften mit der spezifischen UserID für diesen Benutzer anzuzeigen.

Ich habe diese Methode in der zweiten Form gemacht, um bestimmte Gesellschaften zu zeigen, aber ich weiß nicht, was ich in Equals Klammern setzen soll. Ich habe viele Möglichkeiten ausprobiert, aber nichts hat funktioniert ...

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);  
} 

Wenn Sie einige Tipps haben, bitte, geben Sie mir einen Weg.

Rest meines Code:

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

Was ist '_bs'? – Eldeniz

+0

Können Sie 'gwUser.DataSource = ListSociety' überprüfen – Eldeniz

+0

Sie müssen etwas wie' .Where (s => s.UserID.Equals (UserIdOfLoggedInUser)) 'verwenden. Aber wie Sie "UserIdOfLoggedInUser" finden, liegt an Ihnen, weil wir nicht Ihren gesamten Code sehen. –

Antwort

0

Ich löste das Problem ! Das ist, was ich tat:

In frmLogin.cs

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

Und in 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);  
    } 

Vielen Dank allen für Ratschläge!

0

Sind Sie mit asp.net Mitgliedschaft Anbieter? Wenn ja, dann können Sie den unten Code verwenden, um die ID zu erhalten:

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

Sie Sie müssen lediglich Ihre angemeldete Benutzer-ID von einer Textdatei oder einem XML-Code abrufen. –

+0

Ich verwende keine Webdienste. – Raul

+0

Grundsätzlich speichern Sie ein Benutzerobjekt im Anmeldeformular und die Programmklasse, das Benutzerformular hat keine Ahnung von dem Benutzerobjekt, das Sie brauchen, um Ihr Benutzerobjekt an den Benutzer Formularkonstruktor zu übergeben, um 'Code' public frmUsers (User loggedUser) { InitializeComponent(); InitControls(); } –

0

Ich denke Problem ist dgwUser.AutoGenerateColumns = false;

Entweder

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

Oder

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); 
     ... 
Verwandte Themen