2015-08-04 2 views
0

У меня проблема с тем, что при доступе и отображении переменных из моего класса с именем Members в ярлыки при загрузке формы этикетки просто отображают пустые данные.C# Доступ к переменным из класса

Моя программа использует форму входа для этого, и это происходит, когда она получает и устанавливает детали членов в класс. Он использует код ниже:

public class Member 
{ 
    public int MemberID { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public string CourseTitle { get; set; } 
    public string Password { get; set; } 
} 

    private IList<Member> GetMembers() 
    { 
     OleDbConnection conn = null; 
     OleDbDataReader reader = null; 

     try 
     { 
      conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Rhys\Documents\Visual Studio 2013\Projects\AssignmentTrackerV2\AssignmentTrackerV2\bin\Debug\ATDatabase.accdb"); 
      conn.Open(); 

      OleDbCommand cmd = new OleDbCommand("SELECT * FROM MemberDetails WHERE [Name] = @Name AND [Password] = @Password", conn); 
      cmd.Parameters.AddWithValue("@Name", txtFirstNameLogin.Text); 
      cmd.Parameters.AddWithValue("@Password", txtPasswordLogin.Text); 

      reader = cmd.ExecuteReader(); 
      var members = new List<Member>(); 
      while (reader.Read()) 
      { 
       var member = new Member(); 
       member.MemberID = reader.GetInt32(reader.GetOrdinal("MemberID")); 
       member.Name = reader["Name"].ToString(); 
       member.Surname = reader["Surname"].ToString(); 
       member.CourseTitle = reader["CourseTitle"].ToString(); 

       members.Add(member); 

       Form2 frm2 = new Form2(); 
       this.Hide(); 
       frm2.ShowDialog(); 
      } 
      return members; 
     } 
     finally 
     { 
      if (reader != null) reader.Close(); 
      if (conn != null) conn.Close(); 
     } 
     return null; 
    } 

Это в основном просто проверяет пользователь, имя и пароль запись с данными базы данных, и если она будет успешной, то она устанавливает имя, пароль, ID пользователя и название курса в переменных, хранящихся в класс.

Однако, когда я использую этот код под формой 2 события нагрузки

var member = new Member(); 
lblName.Text = member.Name; 
lblSurname.Text = member.Surname; 
lblCourseTitle.Text = member.CourseTitle; 

Все метки просто оказываются пустыми. Есть идеи?

+4

Ну ... вы создали новый объект-член, без инициализации его значений данных, так что бы вы сделали * Ожидайте, что произойдет? – BradleyDotNET

ответ

0

Игнорирование на мгновение сомнительной логики хранения паролей открытого текста в вашей базе данных & hellip;

Мне кажется, что вы не в состоянии передать полученные данные членов в Form2 Например, вы создали, и вместо инициализации своей формы с помощью экземпляра Memberнеинициализированного.

Без a good, minimal, complete code example, который надежно воспроизводит проблему, невозможно точно сказать, какой будет правильный подход. Но в целом вы, вероятно, должны пройти ссылку member от GetMembers() до экземпляра Form2, например. к его конструктору.

Это может выглядеть примерно так:

Form2 frm2 = new Form2(member); 

где:

class Form2 : Form 
{ 
    private readonly Member _member; 

    public Form2(Member member) 
    { 
     InitializeComponent(); 
     _member = member; 
    } 
} 

Затем изменить код Load событий, чтобы выглядеть следующим образом:

lblName.Text = _member.Name; 
lblSurname.Text = _member.Surname; 
lblCourseTitle.Text = _member.CourseTitle; 

Т.е. удалите локальную переменную member и вместо этого используйте поле класса _member.

0

Кроме того, как предложение, при проверке кода Form2 находится внутри while-loop (во время сбора данных), что вы можете сделать, это собрать первый все данные и поместить его в members коллекции, то вы можете отобразить каждый member к форма, передав всю коллекцию Form2, или если вы хотите передать каждого члена, вы можете сделать это после сбора всех данных (не во время сбора).

В псевдокоде:

  • Collect each Member ->Add to Members Collection
  • Используйте Form2, чтобы отобразить каждый Member путем пропускания Member к нему или передать все Members Collection, чтобы Form2 затем траверс каждого члена с помощью Next или Previous кнопку
Смежные вопросы