Praveen_P Ответов: 4

Как обновить combobox в приложении c# form при нажатии кнопки Сохранить в другой форме?


В моем приложении c# есть поле со списком "имена клиентов", которое помещается в основную форму .Есть кнопка для добавления новых клиентов, при нажатии на кнопку открывается другая форма, и нам нужно сохранить данные клиента. После этого я хочу перезагрузить "MainForm" для combobox, чтобы включить новое имя, или combobox, чтобы отобразить новое имя .


заранее спасибо.

BulletVictim

Ладно, самый быстрый способ, который я могу придумать, чтобы сделать это, - это что-то вроде этого.
на кнопке MainForm нажмите кнопку Добавить нового пользователя:
AddForm frmAdd = новая форма добавления();
этот.Скрыть();
frmAdd.Метод showdialog();
пробовать{
этот.Покажите();
}

Затем на кнопке Сохранить пользователя или вернуться в основную форму:
Форму mainform мыши frmmain = новую форму mainform();
этот.Скрыть();
мыши frmmain.Метод showdialog();
пробовать{
этот.Покажите();
}
Это в основном закрывает основную форму, пока вы добавляете нового клиента, а затем, когда эта форма закрывается, она открывает новую основную форму и снова запускает весь код, поэтому она должна повторно заполнить ваш combobox, предполагая, что он заполнен в загрузке формы основной формы.

BillWoodruff

Вам действительно нужно продумать последствия запуска этого кода. Во-первых, вы создадите возможное множество экземпляров MainForm, и каждый новый экземпляр MainForm не будет иметь доступа ни к какой информации, созданной на предыдущих экземплярах MainForm. Вы также никогда не сможете передать какую-либо информацию, введенную в 'AddForm, в любой экземпляр MainForm.

BillWoodruff

Суть сценария здесь заключается в том, как передать информацию из одной формы в другую, один из наиболее часто задаваемых и отвечаемых здесь вопросов. Есть несколько вариантов.

В данном случае нам не хватает двух очень важных фрагментов информации:

1. в вашей основной форме, когда пользователь выбирает существующую запись в выпадающем списке: отображается ли что-нибудь в основной форме ? Если да, то что отображается и в каком типе управления отображается то, что отображается: отображается ?

2. когда пользователь создает новую запись и заполняет поля (мы предполагаем) в новой форме, и (мы предполагаем) вы проверяете записи, а затем пользователю разрешается закрыть форму записи: как вы планируете хранить эту новую "сущность", которую вы создали ? В какой тип коллекции или списка чего-то-или-другого: в базу данных ?

В зависимости от ваших целей, эти два вопроса могут оказать большое влияние на ваш дизайн, и если вы ответите на них четко, я буду рад ответить дальше с решением.

RizwanShaikh

но не открывайте новую открытую форму.....
старая форма перезагрузки .....
как

4 Ответов

Рейтинг:
1

SaqibRasheed

Для достижения этой функциональности можно использовать делегаты. Использование делегатов в таком сценарии довольно распространено. Чтобы узнать больше о делегатах, вы можете перейти по следующим ссылкам:


Делегаты C#: шаг за шагом[^]
http://msdn.microsoft.com/en-us/library/ms173171%28v=vs.90%29.aspx[^]
http://msdn.microsoft.com/en-us/library/vstudio/ms173172.aspx[^]


Рейтинг:
1

onelopez

// This goes in your Main form
private void BtnAddNewCustomer_Click(object sender, EventArgs e)
{ // When the user clicks on the button
    CreateUserForm form = new CreateUserForm();
    // TODO: do more stuff with the form
    if(form.ShowDialog() == DialogResult.OK)
    { // User clicked ok on the form and user is now saved
        // TODO: Reload your combo box
    }
    // Safe to close form now
    form.Close();
    form.Dispose();
}


// This goes in CreateUserForm.cs code
private void BtnCreateUser_Click(object sender, EventArgs e)
{
    // TODO: Validate/Save your data here
    DialogResult = DialogResult.OK;
    /* Do not close from this form, 
     * otherwise everything gets disposed of
     * and you will loose data
     */
    Hide();
}


RizwanShaikh

я Вана не открываю новую форму ,,,,,,,
перезагрузите открытую старую форму....
как

Praveen_P

если вы не хотите открывать новую форму то после сохранения снова свяжите выпадающий список

Рейтинг:
0

V.Lorz

Это может послужить вам еще для нескольких сценариев.

Инкапсулируйте ваши данные о клиентах в один класс (например. MyCustomerData) со всеми свойствами и полями, необходимыми для хранения информации, относящейся к вашему приложению (MyCustomerData.cs).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ComboBoxUpdate
{
    /// <summary>
    /// Customer Data Encapsulation
    /// </summary>
    public class MyCustomerData
    {
        /// <summary>
        /// Field for holding the Name
        /// </summary>
        private string m_Name;

        /// <summary>
        /// Gets or Sets the customer Name
        /// </summary>
        public string Name
        {
            get { return m_Name; }
            set { m_Name = value; }
        }


        /// <summary>
        /// Contructor
        /// </summary>
        /// <param name="Name">The Name of the Customer</param>
        public MyCustomerData(string Name)
        {
            this.Name = Name;
        }
    }
}


Создайте одну (скажем) форму MyCustomerDataEditor с одним конструктором, который берет один экземпляр из вашего класса MyCustomerData. Конечно, вам нужно добавить всю логику проверки пользовательского ввода, которая обеспечивает правильность данных, включает|отключает кнопку "Принять" после проверки изменений (и т. д.).
MyCustomerDataEditorFrm.в CS

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ComboBoxUpdate
{
    public partial class MyCustomerDataEditorFrm : Form
    {
        private MyCustomerData m_Customer;


        public MyCustomerData Customer
        {
            get { return m_Customer; }
            set 
            {
                m_Customer = value;
                ValidateEditors();
            }
        }


        public MyCustomerDataEditorFrm( MyCustomerData Customer )
        {
            m_Customer = Customer;

            InitializeComponent();

            this.Customer = Customer;
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            ValidateEditors();
        }


        private void ValidateEditors()
        {
            // Simple validation, only accept not empty name.
            button1.Enabled = !string.IsNullOrEmpty(textBox1.Text);
        }


        private void button1_Click(object sender, EventArgs e)
        {
            // Apply changes;
            m_Customer.Name = textBox1.Text;
        }
    }
}


Объявите какой - то список для хранения списка экземпляров MyCustomerData в вашей основной форме:
List<mycustomerdata> m_MyCustomers = new List<mycustomerdata>()</mycustomerdata></mycustomerdata>


В своей основной форме заполните список допустимыми данными из вашей базы данных. Предположим, у вас есть один метод GetMeTheDataFromTheDataBase (), который извлекает эти данные.
m_MyCustomers.AddRange( GetMeTheDataFromTheDataBase())


Вы можете настроить ComboBox таким образом, чтобы текст, который он отображает, был свойством CustomerName (при условии, что вы объявили его в классе MyCustomerData).

Основная форма может закончиться так:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ComboBoxUpdate
{
    public partial class Form1 : Form
    {
        private List<mycustomerdata> m_Customers;

        public Form1()
        {
            m_Customers = new List<mycustomerdata>();

            InitializeComponent();

            comboBox1.DisplayMember = "Name";
            LoadCustomers();
            UpdateCustomersComboBox();
        }


        /// <summary>
        /// Update the combobox items from the customers list.
        /// </summary>
        private void UpdateCustomersComboBox()
        {
            foreach (MyCustomerData Customer in m_Customers) 
            {
                if (comboBox1.Items.IndexOf(Customer) < 0) 
                    comboBox1.Items.Add(Customer);
            }

            UpdateUIControls();
        }


        /// <summary>
        /// Populate the local copy of the customers list
        /// </summary>
        private void LoadCustomers()
        {
            m_Customers.AddRange( new MyCustomerData[] {
                new MyCustomerData( "John Doe" ),
                new MyCustomerData( "Jane Doe" )
            });
        }


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            UpdateUIControls();
        }


        /// <summary>
        /// Update the state of all relevant controls
        /// </summary>
        private void UpdateUIControls()
        {
            button2.Enabled = (comboBox1.SelectedIndex >= 0);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Simply add some data. Here you should do 
            MyCustomerDataEditorFrm Dlg = new MyCustomerDataEditorFrm(new MyCustomerData( "Joe's Brother!" ));
            if (Dlg.ShowDialog(this) == DialogResult.OK)
            {
                m_Customers.Add(Dlg.Customer);
                UpdateCustomersComboBox();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MyCustomerData Customer = comboBox1.SelectedItem as MyCustomerData;

            if (DialogResult.Yes != MessageBox.Show(this, "Sure to remove " + Customer.Name, "Remove Customer", MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
                return;

            m_Customers.Remove(Customer);
            comboBox1.Items.Remove(Customer);

            UpdateUIControls();
        }
    }
}
</mycustomerdata></mycustomerdata>


Еще одна вещь, компоненты в основной форме-это combobox (combobox1), одна кнопка "Добавить новую" (button1) и одна кнопка "Удалить" (button2).

Я не видел способа прикрепить образец проекта/кода, но если он вам понадобится, я могу отправить его вам по электронной почте.

Надеюсь, это вам как-то поможет.


Рейтинг:
0

kiran murkal

При добавлении кнопки имя клиента очистите выпадающий список, например CmbName.items.clear(),
После вставки нового имени в базу данных перезагрузите все имена из базы данных в combobox