2

在我的窗口应用程序中,我有 orderNumber 需要传递给另一个表单。这个订单号是由我将在下面放置的代码生成的。我试图仅将 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());

;
        }

在第二种形式中,我想使用用于插入用户的相同订单号。现在我有以下代码不起作用,因为 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

创建一个class具有static相同属性的容器namespace

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 回答
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;
}

关于 Form1 按钮单击事件

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