1

データの管理についてさらに読んで調査した後、データセットの MSDN サイトに基づいてコードをやり直しました。しかし、私は思わぬ障害に遭遇しています。クラスレベル内でデータセットを宣言したと思います。ただし、そのデータセットをプルしようとするたびに

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

エラーが発生しています:

  1. 名前「tblEmployees」は現在のコンテキストに存在しません
  2. 名前 'TextBox12' は現在のコンテキストに存在しません

フォーム内のどこからでも呼び出せるように、クラス レベルで宣言できるようにしたいと考えています。

私はすでにクラス レベルで MSDN サイトを読んでいますが、正直なところ、それは私をかなり混乱させたと思います。

基本的に私が望んでいるのは、データセットが名前のアルファベット順で従業員のリストを提供し、ユーザーがドロップダウンボックスから従業員を選択すると、従業員 ID を選択して textBox12 に表示し、検索を実行することですコードの //comments で定義されたフィールドなど、従業員に表示する残りのデータの tblEmplpoyees の。

誰かがこれを手伝ってくれますか、これが私がコードatmのために持っているものです:

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();
    }


}

}

4

2 に答える 2

0

Employees:のコンストラクターでローカル変数を作成しています。

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

今、あなたは別のクラスからそのローカル変数にアクセスしようとしています:

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

もちろん、それは機能しません。TextBox12同じ理由で、フォームののインスタンスにアクセスできません。

入力したテキストで実際にフィルタリングしたいと思いDataTableます。(filter-)button-clickイベントなどのイベントを処理する必要があります。

次に、行をフィルタリングするために、より読みやすく保守しやすい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 ...
   }
}
于 2012-07-24T21:19:08.370 に答える
0

この方法で myClass の drRow メンバーを初期化することはできません。まず、tblEmployees 変数は、Employees コンストラクターが終了すると存在しなくなるローカル変数です。それで、それはなくなりました。しかし、それがクラス メンバー (クラス レベルのスコープで定義されている) であったとしても、現在のように使用することはできません。

myData クラスを取り除き、宣言を Employees クラスと同じスコープ レベルに配置することを検討してください。

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

ちなみに、これで TextBox12 のコンテキストの問題も修正されるはずです。

于 2012-07-24T21:26:35.077 に答える