2

私のウィンドウアプリケーションには、別のフォームに渡す必要のあるorderNumberがあります。この注文番号は、以下に示すコードによって生成されます。1つの同じ注文番号のみを2つの場所に渡そうとしていますが、残念ながら、2つの異なる注文番号が両方の場所に渡されました。1つの注文番号のみが両方の場所に渡されるようにするにはどうすればよいですか。

注文番号を生成するコード:

public string orderNumber()
        {
           string ord = "ORD" + get_next_id() + DateTime.Now.Year;
           return ord;

       }

 public int get_next_id()
        {
            OleDbConnection objConnection = null;
            OleDbCommand objCmd = null;
            String sql;
            int res;

            // Create and open the connection object
            objConnection = new OleDbConnection(connString);

            objConnection.Open();
            sql = "SELECT IIF(MAX(Customer.NumGenerate) IS NULL,100,MAX(Customer.NumGenerate)) as v_max FROM Customer;";
            objCmd = new OleDbCommand(sql, objConnection);
            res = (int)objCmd.ExecuteScalar();
            ++res;
            objConnection.Close();
            return res;
        }

最初の形式では、次の挿入メソッドは注文番号を使用します。

private void SaveAllListItems()
        {
            string listItems = string.Empty;
            foreach (var listBoxItem in listBox1.Items)
            {

                listItems += listBoxItem.ToString();

                if (listBox1.Items.IndexOf(listBoxItem) < listBox1.Items.Count - 1)
                {
                    listItems += ", ";
                }
            }

            InsertUser(maskedTextBox1.Text, comboBox1.Text, maskedTextBox2.Text, maskedTextBox3.Text, maskedTextBox4.Text, maskedTextBox5.Text,
                       maskedTextBox6.Text, maskedTextBox7.Text, maskedTextBox8.Text, maskedTextBox9.Text, listItems, DateTime.Now, maskedTextBox10.Text, orderNumber(), get_next_id());

;
        }

2番目の形式では、ユーザーの挿入に使用されているのと同じ注文番号を使用します。現在、form1の注文番号が異なり、form 2の注文番号が異なるため、機能しない次のコードがあります。

 private void FindOrder()
        {


            Form1 m = new Form1();
            string number = m.orderNumber();
          //  string number = "ORD1012013";

            string InvSql = "SELECT  (Customer.[Title] + SPACE(2)  + Customer.[Customer's Name]) as CustomerName, Customer.[Customer's Ebayname], Customer.[Email Address], Customer.[Phone Number], (Customer.[Address 1] + SPACE(2)  +Customer.[Address 2] + SPACE(2)  + Customer.[City] + SPACE(2)  + Customer.[Post Code]+  SPACE(2)  + Customer.[Country]) as Address, Customer.[Item Purchased], Customer.[Purchased Date], Customer.[Total Price], Customer.[OrderNumber] FROM Customer WHERE Customer.[OrderNumber]= '" + number + "'";

            OleDbConnection cnn = new OleDbConnection(connString);
            OleDbCommand cmdOrder = new OleDbCommand(InvSql, cnn);
            cnn.Open();

            OleDbDataReader rdrOrder = cmdOrder.ExecuteReader();


            rdrOrder.Read();
            custName.Text = rdrOrder["CustomerName"].ToString();
            ebayName.Text = rdrOrder["Customer's Ebayname"].ToString();
            email.Text = rdrOrder["Email Address"].ToString();
            phone.Text = rdrOrder["Phone Number"].ToString();
            address.Text = rdrOrder["Address"].ToString();
            item.Text = rdrOrder["Item Purchased"].ToString();
            date.Text = Convert.ToString(Convert.ToDateTime(rdrOrder["Purchased Date"]));
            price.Text = rdrOrder["Total Price"].ToString();
            order.Text = rdrOrder["OrderNumber"].ToString();


            rdrOrder.Close();
            cnn.Close();
        }

同じ注文番号を両方の場所に渡すにはどうすればよいですか?

4

2 に答える 2

0

さまざまな方法でフォーム間でデータを渡すことができます。

これを行う方法に関する優れたチュートリアルを次に示します。コンストラクターとプロパティのアプローチの方が実装が簡単です。

form1 クラスに orderid を保存していないようです

Form1 クラスで OrderID の変数を宣言します。

string OrderId;

既存のメソッドを変更する

public string orderNumber()
{
  OrderId = "ORD" + OrderId + DateTime.Now.Year;      
}

次に、コンストラクター アプローチに従って、値を PrintForm に渡します。

PrintForm クラス内で orderID の変数を再度宣言します。

string OrderId;

PrintForm コンストラクターをこれに変更します

public PrintForm(string value)
{
  InitializeComponent(); 
  OrderId=value;
}

on Form1 ボタンクリックイベント

private void button1_Click(object sender, System.EventArgs e)
{
    PrintForm frm=new PrintForm(OrderId);
    PrintForm.Show();
}
于 2013-02-23T15:15:35.517 に答える
0

同じ にプロパティを持つコンテナーclassを作成します。staticnamespace

class clsDummy
 {
  internal static string ptyValue { get; set; }
 }

注文IDを取得する場所にこのプロパティを割り当てることができます:

public string orderNumber()
 {
   string ord = "ORD" + get_next_id() + DateTime.Now.Year;
   clsDummy.ptyValue =ord ;
   return ord;
 }

その後、アクセスしたい場所はどこでも、内部の値をチェックするだけです:clsDummy.ptyValue

于 2013-02-26T08:31:21.883 に答える