2013-12-14 59 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) 
相關問題