2012-07-24 49 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上下文问题。