2013-02-23 2 views
2

В моем приложении окна у меня есть номер заказа, который нужно передать в другую форму. Этот номер заказа генерируется кодом, который я укажу ниже. Я пытаюсь передать только один одинаковый номер заказа в два места, но, к сожалению, два разных номера ордера были переданы в оба местоположения. Как я могу сделать, чтобы только один номер заказа был передан в оба местоположения.Передача того же значения метода в несколько форм

код, который генерирует номер заказа:

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 имеет другой номер заказа и форма 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(); 
     } 

Как передать такой же номер заказа в оба места?

+0

почему бы не использовать общественную собственность на свой второй формы и установите значение в конструкторе form2. –

+0

Можете ли вы просто привести мне пример, что вы пытаетесь сказать> –

ответ

0

Данные могут быть переданы между формами по-разному.

Здесь хорошо tutorial о том, как это сделать. Подход конструктора и собственности проще реализовать.

Вы не кажется, что сохранение OrderID на form1 класса

Объявляем переменную для OrderID на классе Form1

string OrderId; 

Измените существующее место метод

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

А затем следуют Подход конструктора для передачи значения в PrintForm

Опять же объявить переменную для OrderId внутри PrintForm класса

string OrderId; 

Изменить PrintForm Constructor к этому

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

на Form1 кнопку мыши событие

private void button1_Click(object sender, System.EventArgs e) 
{ 
    PrintForm frm=new PrintForm(OrderId); 
    PrintForm.Show(); 
} 
+0

, если я передам значение с помощью метода конструктора, он будет по-прежнему иметь два порядка, как будет вызван метод orderNumber, который будет производить другой номер заказа. Мне нужно сохранить его где-нибудь, прежде чем я перейду в оба места, чтобы оба места имели одинаковый номер. –

+0

Я didnt получаю you.i думал, что у вас возникла проблема с передачей значений. Вы можете перепечатать свою проблему. Является ли метод номера заказа снова вызванным во второй форме? –

+0

@Codelgnoto Извините, я думал, что с этим вопросом ясно. Так или иначе, в моей форме окна есть две формы: Form1 и PrintForm. В Form1 пользователь вводит информацию и нажимает кнопку добавления записи, которая сохраняет введенную информацию в базе данных с порядковым номером, сгенерированным методом public string OrderNumber(). Теперь я хочу передать значение номера заказа в PrintForm. Если я вызову Form1.OrderNumber из PrintForm, у него будет другой номер заказа. –

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

Смежные вопросы