2013-11-09 8 views
1

См. Ниже изображение - В моей базе данных У меня есть 3 столбца, которые меня интересуют отображением результатов через мою форму окна. В этом примере я выбрал рецепт «Спагетти-фрикадельки» из базы данных и нажал кнопку «Восстановить», что произойдет, тогда будут заполнены два текстовых поля, которые я разместил справа, один с ингредиентами и один с шагами по приготовлению , Пожалуйста, проигнорируйте метод, в котором я храню данные на данный момент, поскольку это не моя текущая проблема.Форма Windows открытая новая форма для отображения данных

Вопрос

Основные функциональные возможности, что я хочу, работает в том смысле, что я могу отобразить основную информацию, связанную с выбором пользователя из выпадающего меню хотя и не очень красиво. Тем не менее, я хочу, чтобы пользователь щелкнул кнопку retrieve, откроется новое окно и отобразит заголовок, изображение, ингредиенты и шаги для этого рецепта. Теперь я уже добавил новую форму в проект с именем Pop_up.cs, но я не уверен, как изменить метод «Извлечь», чтобы сначала вывести эту форму, а во-вторых, заполнить поля текстового поля/изображения, которые я буду размещать на формы с данными, указанными пользователем в форме1 и извлеченными из моей базы данных.

Получить метод

//R E T R I E V E  B U T T O N 
     private void button3_Click(object sender, EventArgs e) 
     { 

      DataTable dataTable = dset.Tables[0]; 

      if (pictureBox2.Image != null) 
      { 
       pictureBox2.Image.Dispose(); 
      } 

      FileStream FS1 = new FileStream("image.jpg", FileMode.Create); 

      foreach (DataRow dataRow in dataTable.Rows) 
      { 

       if (dataRow[0].ToString() == comboBox1.SelectedItem.ToString()) 
       { 

        byte[] blob = (byte[])dataRow[1]; 
        FS1.Write(blob, 0, blob.Length); 
        FS1.Close(); 
        FS1 = null; 
        label5.Text = dataRow[3].ToString(); 
        label6.Text = dataRow[2].ToString(); 
        pictureBox2.Image = Image.FromFile("image.jpg"); 
        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; 
        pictureBox2.Refresh(); 
       } 
      } 
     } 

enter image description here

+0

you wa nt для отображения информации о рецептах на новой форме? пожалуйста, поправьте меня, если я ошибаюсь. –

+0

Во-первых, я бы создал класс рецептов, чтобы сделать код более удобочитаемым. Затем я создавал экземпляр объекта «Рецепт», когда пользователь выбирает рецепт, и я отправил этот рецепт в новый Form2 в качестве параметра. – user1646737

+0

@Sudhakar Да, все в правом нижнем углу изображения. I.e pic, инструкции и ингредиенты должны быть открыты в новом окне. – JsonStatham

ответ

2

Изменить конструктор класса POP_UP, чтобы принять параметр. И написать метод в FillData() для загрузки данных рецептов из базы данных

public partial class Pop_up : Form 
    { 
     public Pop_up(string recipe) 
     { 
      InitializeComponent(); 
      FillData(recipe); 

     } 
    } 

В коде Retrive баттона показать POP_UP. Передайте имя Receipe в качестве аргумента

//R E T R I E V E  B U T T O N 
    private void button3_Click(object sender, EventArgs e) 
    { 
     string recipeName = comboBox1.SelectedItem.ToString(); 
     Pop_up p = new Pop_up(recipeName); 
     p.Show(); 
    } 
+0

. Я бы добавил дополнение конструктора pop_up в свой form1.cs? – JsonStatham

+0

Я не уверен, понял ли я ваш вопрос. Вы спрашиваете о методе FillData? – gawicks

+0

Когда вы ссылаетесь на класс Pop_up, ссылаетесь ли вы на мою дополнительную форму, которую я хочу открыть? Если да, то почему я создаю свою форму как «p»? Извините мое невежество – JsonStatham

1

Пусть Pop_up.cs имеет следующие элементы управления

PictureBox pictureBox; 
Label labelIngredients; 
Label labelCookSteps; 

Тогда Pop_up.cs может выглядеть следующим образом:

public partial class Pop_up : Form 
{ 
    public Pop_up() 
    { 
     InitializeComponent();   
    } 

    public Pop_up(string recipeName, DataSet dset) 
    { 
     InitializeComponent(); 
     BindDataContext(recipeName, dset); 

    } 

    private void BindDataContext(string recipeName, DataSet dset) 
    { 
     DataTable dataTable = dset.Tables[0]; 

     if (pictureBox.Image != null) 
     { 
      pictureBox.Image.Dispose(); 
     } 

     FileStream FS1 = new FileStream("image.jpg", FileMode.Create); 

     foreach (DataRow dataRow in dataTable.Rows) 
     { 

      if (dataRow[0].ToString() == recipeName) 
      { 
       byte[] blob = (byte[])dataRow[1]; 
       FS1.Write(blob, 0, blob.Length); 
       FS1.Close(); 
       FS1 = null; 
       labelIngredients.Text = dataRow[3].ToString(); 
       labelCookSteps.Text = dataRow[2].ToString(); 
       pictureBox.Image = Image.FromFile("image.jpg"); 
       pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; 
       pictureBox.Refresh(); 
      } 
     } 
    } 
} 

Затем кнопку Получить внутри Form1. cs может выглядеть так:

public partial class Form1 : Form 
{ 
    //R E T R I E V E  B U T T O N 
    private void button3_Click(object sender, EventArgs e) 
    { 
     string recipeName = comboBox1.SelectedItem.ToString(); 
     Pop_up p = new Pop_up(recipeName, dset); 
     p.Show(); 
    } 
} 
+0

Я получаю Необработанное исключение типа «System.IO.IOException», произошедшее в mscorlib.dll, и оно разбивается на FileSteam FS1 = новый FileSteam в Pop_up.cs – JsonStatham

+0

Извините, проигнорируйте это, потому что моя первоначальная форма все еще пыталась использовать FileSteam в одно и то же время, комментируя тот или иной вопрос, решит эту проблему – JsonStatham

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