2013-06-06 2 views
1

UserControl:Dynamic-UserControl нажмите событие

private string lastName; 
public string LastName 
{ 
get { return lastName; } 
set 
{ 
    lastName = value; 
    lastNameTextBox.Text = value; 
} 
} 

Форма:

using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
     { 
      myDatabaseConnection.Open(); 
      using (SqlCommand SqlCommand = new SqlCommand("Select LasatName from Employee", myDatabaseConnection)) 
      { 
       int i = 0; 
       SqlDataReader DR1 = SqlCommand.ExecuteReader(); 
       while (DR1.Read()) 
       { 
        i++; 
        UserControl2 usercontrol = new UserControl2(); 
        usercontrol.Tag = i; 
        usercontrol.LastName = (string)DR1["LastName"]; 
        usercontrol.Click += new EventHandler(usercontrol_Click); 
        flowLayoutPanel1.Controls.Add(usercontrol); 
       } 
      } 
     } 

Форма загружает запись из базы данных и отображения каждого ЬавЬЫате в текстовом поле друг UserControls', который создал динамически. Как показать дополнительную информацию, такую ​​как адрес в текстовом поле формы при щелчке динамического пользователя?

Попытка:

private void usercontrol_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
     { 
      myDatabaseConnection.Open(); 
      using (SqlCommand mySqlCommand = new SqlCommand("Select Address from Employee where LastName = @LastName ", myDatabaseConnection)) 

      { 
       UserControl2 usercontrol = new UserControl2(); 
       mySqlCommand.Parameters.AddWithValue("@LastName", usercontrol.LastName; 
       SqlDataReader sqlreader = mySqlCommand.ExecuteReader(); 

       if (sqlreader.Read()) 
       { 
        textBox1.Text = (string)sqlreader["Address"]; 
       } 

      } 
     } 
    } 
+0

И попытка не работает, почему? Здесь недостаточно информации, чтобы даже представить себе, что вы пытаетесь сделать - ** и больше кода не будет ответом. ** Объясните, что вы хотите, что вы делаете , и что не работает. –

+0

@ Майкл - http://stackoverflow.com/questions/16894918/display-a-number-of-usercontrol-based-on-the-number-of-records-in-the-database?noredirect1_comment24378920_16894918 –

ответ

1

Во-первых. В вашем первом фрагменте кода вы выполняете «Выбрать идентификатор из ...», но ожидаете найти поле «LastName» в читателе - не собираетесь работать.

Второй. Если вы знаете, что вам понадобится дополнительная информация из таблицы Employee, я предлагаю вам сохранить ее в том же UserControl, где вы положили LastName. Выполнить «Select * из ...», добавить еще одно поле и свойство UserControl2 и назначить его в петле Read:

usercontrol.Address = (string)DR1["Address"]; 

В-третьих. В вашем втором фрагменте кода, используйте

UserControl2 usercontrol = (UserControl2)sender; 

вместо

UserControl2 usercontrol = new UserControl2(); 

потому, что вновь созданный пользовательский элемент управления не будет иметь никакого LastName назначенную.

Тогда:

private void usercontrol_Click(object sender, EventArgs e) 
{ 
    UserControl2 usercontrol = (UserControl2)sender; 
    textBox1.Text = usercontrol.Address; 
} 
+0

...Спасибо :) –

0

Внутри вашего пользовательского элемента управления UserControl2 (в конструкторе или InitializeComponent метод), вы должны направить события нажатия на потенциальных слушателей.

Нечто подобное:

public UserControl2() 
{ 
    ... 
    this.lastNameTextBox.Click += (s, a) => OnClick(a); 
    ... 
} 
Смежные вопросы