2012-07-24 84 views
1

在對數據進行更多的讀取和研究之後,我已經基於MSDN站點重新編寫了一個數據集的代碼;然而,我正陷入困境。我相信我已經在類級別中聲明瞭該數據集;然而,每當我試圖把該數據集與數據表未找到錯誤

DataRow[] drRow = tblEmployee.Select("EmployeeKey = " + TextBox12.Text) 

我收到錯誤:

  1. 「tblEmployees」並不在當前的背景下
  2. 名稱「TextBox12存在名稱'不存在在當前的情況下

我想能夠decl它是在班級,所以我可以從表格中的任何地方打電話給它。

我已經通讀了MSDN網站上的課程級別,說實話,我認爲這只是讓我更加困惑。

基本上就是我想要發生的是數據集按照字母順序按名字提供員工列表,然後當用戶從下拉框中選擇員工時,應選擇員工ID並將其顯示在textBox12中,然後執行tblEmplpoyees的搜索以查找其餘數據以顯示給員工,例如代碼中的//註釋中定義的字段。

有人可以幫助我這個,這裏是我的代碼大氣壓:

namespace Tempus.Menus 
{ 
public partial class Employees : Form 
{ 
    public class myData 
    { 
     DataSet[]drRow = tblEmployees.Select("EmployeeKey = " + TextBox12.Text);; 
    } 
    public Employees() 
    { 
     InitializeComponent(); 
     //Connect to database for Employees Table Headers 
     SqlConnection myConnection = new SqlConnection(@"Server=server\CHCTEMPUS;Integrated Security=true;" + 
      "user id=userID;password=password;" + 
      "Trusted_Connection=yes;" + 
      "Database=Database;" + 
      "connection timeout=30"); 

     SqlDataAdapter daEmployees 
      = new SqlDataAdapter("Select *, Lname +', '+ Fname as LastFirst, Fname +' '+ Lname as FirstLast FROM Employees WHERE Lname IS NOT NULL AND Fname IS NOT NULL", myConnection); 



     DataSet dsEmployees = new DataSet("Employees"); 
     daEmployees.FillSchema(dsEmployees, SchemaType.Source, "Employees"); 
     daEmployees.Fill(dsEmployees, "Employees"); 

     DataTable tblEmployees; 
     tblEmployees = dsEmployees.Tables["Employees"]; 



     comboBox1.DisplayMember = "FirstLast"; 
     comboBox1.ValueMember = "employeeNumber"; 
     comboBox1.DataSource = tblEmployees; 



     try 
     { } 

     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
     finally 
     { 
      if (myConnection != null) 
      { 
       myConnection.Dispose(); 
      } 


     } 
     comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; 

     comboBox2.SelectedIndexChanged += comboBox2_SelectedIndexChanged; 

    } 



    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (comboBox1.SelectedIndex != -1) 
     { 
      textBox1.Text = string.Empty; 
     } 
     { 
      textBox12.Text = comboBox1.SelectedValue.ToString(); 

     } 
    } 

    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 


     if (comboBox2.SelectedIndex == -1) 
     { 
      textBox1.Text = string.Empty; 
     } 
     else 
     { 

      textBox1.Text = comboBox2.SelectedItem.ToString(); 
     } 
    } 



    private void Employees_Load(object sender, EventArgs e) 
    { 

    } 
    private void label1_Click(object sender, EventArgs e) 
    { 

    } 
    private void textBox1_TextChanged_1(object sender, EventArgs e) 
    { 
    //Last Name 

    } 

    private void textBox2_TextChanged(object sender, EventArgs e) 
    { 
    //First Name 
    } 

    private void textBox3_TextChanged(object sender, EventArgs e) 
    { 
    //Middle Name 
    } 

    private void textBox4_TextChanged(object sender, EventArgs e) 
    { 
    //Hire Date 
    } 

    private void textBox5_TextChanged(object sender, EventArgs e) 
    { 
    //Term Date 
    } 

    private void textBox6_TextChanged(object sender, EventArgs e) 
    { 
    //Company 
    } 

    private void textBox7_TextChanged(object sender, EventArgs e) 
    { 
    //Notes 
    } 

    private void textBox8_TextChanged(object sender, EventArgs e) 
    { 
    //PTO 
    } 

    private void textBox9_TextChanged(object sender, EventArgs e) 
    { 
    //SNP 
    } 

    private void textBox10_TextChanged(object sender, EventArgs e) 
    { 
    //Credentials 
    } 

    private void textBox11_TextChanged(object sender, EventArgs e) 
    { 
    //Employee Full Name (First Last) 

    } 

    private void textBox12_TextChanged(object sender, EventArgs e) 
    { 
    //Employee ID 
    } 

    private void textBox13_TextChanged(object sender, EventArgs e) 
    { 
    //Branch 

    } 
    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 

       { 

      // logic here for if the box has now been checked 


       } 

      else 

       { 

       // what to do if the box has been unchecked 


       } 

    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     Main myNewForm = new Main(); 

     myNewForm.Show(); 

     this.Close(); 
    } 


    private void button2_Click(object sender, EventArgs e) 
    { 
     Reports myNewForm = new Reports(); 

     myNewForm.Show(); 

     this.Close(); 
    } 


} 

}

+1

你能粘貼代碼嗎? – 2012-07-24 21:00:17

+0

對不起,我以爲我已經從Namespace中選擇了全部。我很抱歉。 – 2012-07-24 21:09:32

+0

向我們展示了更多的代碼,尤其是調用和引發錯誤的上下文 – Les 2012-07-24 21:10:11

回答

0

你正在創建中的Employees構造一個局部變量:

DataTable tblEmployees; 
tblEmployees = dsEmployees.Tables["Employees"]; 

現在你正試圖訪問另一個類的wirthin的局部變量:

public class myData 
{ 
    DataSet[]drRow = tblEmployees.Select("EmployeeKey = " + TextBox12.Text);; 
} 

當然,這是行不通的。出於同樣的原因,您無法在窗體中訪問TextBox12的實例。

我假定你實際上是想通過輸入的文本過濾DataTable。 您應該處理一個事件,例如(過濾器)按鈕單擊事件。

然後,您可以使用LNQ-To-DataSet,這是更具可讀性和可靠性的過濾行。你可以申報表例如在形式成員變量和form_load初始化:

private DataTable tblEmployees; 

private void buttonFilter_Click(object sender, System.EventArgs e) 
{ 
    if(tblEmployees != null) 
    { 
     DataTable filtered = tblEmployees.AsEnumerable() 
          .Where(r => r.Fields<String>("EmployeeKey") == TextBox12.Text) 
          .CopyToDataTable(); 
     // do something with it ... 
    } 
} 
+0

好吧,首先我對編程非常新,所以如果它沒有「完美的意義。我道歉。我一直在學習,因爲我沒有在這裏提供任何C#類。我曾嘗試在文本框12中放置該行代碼,現在和公開的員工都在這裏。他們都給出了同樣的錯誤。公共類是否允許在整個表單中訪問數據集,或者我誤解了這個概念? – 2012-07-24 21:22:56

+0

@ChrisTurner:是的,你可以做[訪問修飾符](http://msdn.microsoft.com/en-us/library/wxh6fsc7%28v=vs.71%29.aspx)只能控制成員的可訪問性或類型。這並不意味着你不能訪問沒有**實例**的公共類的成員。 – 2012-07-24 22:23:57

0

不能初始化myClass的這種方式的drRow成員。首先,tblEmployees變量是一個局部變量,它在Employees構造函數完成時不存在。所以,它消失了。但即使它是一個類成員(在類級別範圍內定義),您仍然無法像使用它一樣使用它。

考慮擺脫您的myData類,並將聲明放在與Employees類相同的作用域級別。

public partial class Employees : Form 
{ 
    DataSet[]drRow; 
    public Employees() 
    { 
// etc, etc. 

順便說一句,這也應該修復TextBox12上下文問題。