2013-12-14 61 views
3

我的项目中有两种形式(Form1 & Form2)。将Form1文本框值传递给Form2按钮

在Form1上,我有两个文本框,如“Login”表单,其中用户需要输入用户名(textboxUsername)&密码(textboxPassword)。当用户登录时,Form2弹出。

现在在Form2中我有一个button1和dataGridView1。当我按下按钮1我想显示所选用户,我在Form1中输入(textboxUsername)

我想根据他的用户名获取该用户,并保存在SQL Server中。

窗体2 Button1的代码:

private void button1_Click(object sender, EventArgs e) 
    { 
     string constring = @"Data Source=V-K\;Initial Catalog=ATMKlientet;Integrated Security=True"; 
     SqlConnection conDataBase = new SqlConnection(constring); 
     SqlCommand cmdDataBase = new SqlCommand(" select * from Clients ;", conDataBase); 

     try 
     { 
      SqlDataAdapter sda = new SqlDataAdapter(); 
      sda.SelectCommand = cmdDataBase; 
      dbdataset = new DataTable(); 
      sda.Fill(dbdataset); 
      BindingSource bSource = new BindingSource(); 

      bSource.DataSource = dbdataset; 
      dataGridView1.DataSource = bSource; 
      sda.Update(dbdataset); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 

在这种情况下,在这里我想打电话给Form1中textBoxUsername的一部分,在Form2的是:

(" select * from Clients where Username='" + this.textBoxUsername + "';", conDataBase); 
+0

此问题的基本答案是不要。有一个用户类并通过事件链接起来(一个接口也会很好),那么你最终将得到两个表单“知道”登录界面而彼此没有关系。 –

回答

4

在Form1当您打开第二种形式,也许你有

Form2 f = new Form2(); 
f.ShowDialog(); 

在这里你可以改变呼叫的文本框的值传递给构造的Form2;

Form2 f = new Form2(textBoxUserName.Text); 
f.ShowDialog(); 

里面的Form2的构造函数您收到此值,并将其存储在一个类级别的全局变量

public class Form2: Form 
{ 
    private string currentUserName = string.Empty; 
    public Form2(string userName) 
    { 
     currentUserName = userName; 
    } 
} 

现在你可以使用内部私有变量currentUserName为您查询

作为一个边请注意,不要使用字符串连接来构建sql命令。始终使用参数化查询:

SqlCommand cmd = new SqlCommand("select * from Clients where [email protected]", conDataBase); 
cmd.Parameters.AddWithValue("@uname", currentUserName); 
..... 

使用字符串连接是危险的,因为你的代码变得容易受到SQL注入攻击,你需要采取适当的措施字符串,小数和日期解析。 (例如,如果用户名包含单引号,字符串连接将生成无效的SQL语句,而没有用单引号替换成几个引号)

+0

谢谢!现在我可以得到我在Form1中输入的选定客户端。 :) – user2969489

+0

现在在Form2上使用了一个名为Money的列。那么我可以创建一个可输入数值的文本框(例如50),并根据当前登录的用户从数据库中提取数据吗?如果此用户的Money列有100美元,当我撤回50时,在数据库中保留50个?请帮忙,谢谢! – user2969489

+0

现在回答这个问题有点困难。我建议用代码示例准备一个新问题并发布。通过这种方式,您比直接询问我是唯一一个通过您的新问题通知的人更关注您的问题。 – Steve

0

一个新的数据库的请求是没有必要的,因为你您已经在窗体中的用户名称,您只需通过相应的构造函数将它发送到Form2:

在Form 2中添加一个新的构造函数:

public void Form2 (String userName){...} 

在Form1:

Form 2 = new Form2 (this.textBoxUsername.Text) 
相关问题