Как я могу заставить usercontrol передавать значения из формы, в которой он инициирован, в другую? - PullRequest
0 голосов
/ 01 июля 2018

Я создаю это простое приложение для заказа видеоигр. Я создал userControl с именем productControl. Код:

public partial class productControl : UserControl
{
    private string pName;
    private float pPrice;
    private string pDesc;
    private string pImgUrl;

    public productControl() => InitializeComponent();

    public string getName
    {
        get => pName;
        set
        {
            pName = value;
            productName.Text = pName;
        }
    }

    public float getPrice
    {
        get => pPrice;
        set
        {
            pPrice = value;
            productPrice.Text = pPrice.ToString("c");
        }
    }

    public string getDescription
    {
        get => pDesc;
        set
        {
            pDesc = value;
            descriptionText.Text = pDesc;
        }
    }

    public string getImage
    {
        get => pImgUrl;
        set
        {
            pImgUrl = value;
            prodImage.Load(pImgUrl);
            prodImage.SizeMode = PictureBoxSizeMode.StretchImage;
        }
    }

    public int getProdId { get; set; }

    private void buyButton_Click(object sender, EventArgs e)
    {
        MessageBox.Show(pPrice.ToString("c"));
        orderConfirmation o = new orderConfirmation();
        o.Show();
    }
}

И Windows Forms с именем accountMain. Который извлекает данные из SQL и вызывает productControl для их заполнения.

private string productRetriever = "SELECT prodId, prodName, prodPrice, prodImg, prodDesc FROM [dbo].[products]";

private void accountMain_Load(object sender, EventArgs e)
{
        createFunctions();
}
private void createFunctions()
{
    connection.Open();
    SqlCommand retProduct = new SqlCommand(productRetriever, connection);
    panel1.Controls.Clear()

    using (var reader = retProduct.ExecuteReader())
    {
        int count = 0;
        while(reader.Read())
        {
            p[count] = new productControl();
            p[count].Name = count.ToString();
            p[count].getProdId = (int)reader[0];
            p[count].getName   = (string)reader[1];
            p[count].getPrice  = (float)reader[2];
            p[count].getImage  = (string)reader[3];
            p[count].getDescription = (string)reader[4];
            panel1.Controls.Add(p[count]);
            count++;
        }
    }
    connection.Close();
}

Выше я использовал цикл while для заполнения панели1 productControl внутри формы accountMain. Как я могу заставить userControl скрывать accountForm и показывать другую форму (передавая значения в новую форму, такую ​​как title и price), когда я нажимаю кнопку «Купить», которая находится внутри userControl.

Кроме того, я новичок в реализации SQL в C #. Это правильный способ заполнения панели1 в accountMain с помощью executeReader () или есть лучший подход для извлечения данных из SQL и их отображения в userControl?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...