用户控件:
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文本框中的每个LastName。 如何在单击dynamic-usercontrol时显示表单文本框中的地址等附加信息?
尝试:
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 :(得分:1)
首先。在您的第一个代码片段中,您执行“从...中选择ID”,但期望在阅读器中找到字段“LastName” - 无法正常工作。
二。如果您知道需要Employee
表格中的更多信息,建议您将其存储在放置UserControl
的同一LastName
中。执行“从*中选择*”,将另一个字段和属性添加到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;
}
答案 1 :(得分:0)
在用户控件 UserControl2 (在构造函数或 InitializeComponent 方法中)中,您应该将click事件转发给潜在的侦听器。
类似的东西:
public UserControl2()
{
...
this.lastNameTextBox.Click += (s, a) => OnClick(a);
...
}