Member 12943813 Ответов: 1

Обновите мой список при вставке нового значения в таблицу БД


Привет, я создал список, который работает как контроллер / фильтр для моего DataGridView. В той же форме у меня также есть функция вставки для создания новой компании.

Теперь, когда пользователь создает новую компанию, я хочу обновить список, чтобы он содержал созданную новую компанию.

namespace MyNameSpace
{
    // Creating our Listbox, Datatable and DataGridView for later use
    public partial class CompanyForm : Form
    {
        private ListBox companyList = new ListBox();
        private DataTable dataEmployeesSource = new DataTable();
        private DataGridView dataEmployees = new DataGridView();

        //Connection String
        string cs = ConfigurationManager.ConnectionStrings["MyCS"].ConnectionString;

        // we initialize our methods but dont load them
        public CompanyForm()
        {
            InitializeComponent();

            initDataEmployees();
            initCompanyList();

            companyList.SelectedIndexChanged += listbox1_SelectedIndexChanged;
        }

        // The first DataEmployees method to fill our DataGridView is executed
        private void initDataEmployees()
        {
            const string sql = "Select fname, ename, c.companyName AS companyName FROM dbo.Users u inner join dbo.Company c on c.companyName = u.company;";
            dataEmployeesSource = selectIntoDataTable(sql);
            dataEmployees.DataSource = dataEmployeesSource;
        }

        // Method to fill our CompanyList which later works as a filter for our DataGridView
        private void initCompanyList()
        {
            const string sql = "Select companyName from dbo.Company";
            try
            {
                DataTable dt = selectIntoDataTable(sql);
                companyList.DataSource = dt;
                companyList.ValueMember = "companyName";
            }
            catch (Exception ex)
            {
                MessageBox.Show("There are no companies to display");
            }
        }
        // Filling our DataTable locally to enable fast filtering
        private DataTable selectIntoDataTable(string sql)
        {
            DataTable dt = new DataTable();
            using (SqlConnection con = new SqlConnection(cs))
            {
                try
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand(sql, con))
                    using (SqlDataAdapter a = new SqlDataAdapter(cmd))
                    {
                        a.Fill(dt);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
                finally
                {
                    con.Close();
                }
            }
                return dt;
            }
        // Here we show the changed value based on the selected index from our CompanyList
        private void listbox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataRowView selectedRow = (DataRowView)companyList.SelectedItem;
            string selectedText = (string)selectedRow.Row["companyName"];
            DataView dv = dataEmployeesSource.DefaultView;
            string filter = string.Format("companyName = '{0}'", selectedText);
            dv.RowFilter = filter;
            dataEmployees.DataSource = dv;
        }
        // Create company, we create a company here and insert it into our dbo.Company table
        private void createCompany_Click_1(object sender, EventArgs e)
        {
            if (textBoxCompanyName.Text == "")
            {
                MessageBox.Show("Vänligen fyll i informationen");
                return;
            }
            using (SqlConnection con = new SqlConnection(cs))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("insert into dbo.Company (companyName) values(@companyName)", con);
                cmd.Parameters.AddWithValue("@companyName", textBoxCompanyName.Text);
                SqlDataAdapter adapt = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapt.Fill(ds);
                con.Close();
                MessageBox.Show("Grattis! Du har skapat ett företag");

            }
        }
    }
}


Что я уже пробовал:

Я попытался добавить обновления в конце метода createCompany_Click

[no name]

Почему вы создаете новый набор данных, заполняете его своим адаптером, а затем ничего с ним не делаете?

1 Ответов

Рейтинг:
0

#realJSOP

Ты не звонишь cmd.ExecuteNonQuery() В вашем createCompanyClick обработчик.


Member 12943813

На самом деле он ничего не делает, чтобы добавить его. Мне нужен список, чтобы быть обновлены после того, как я добавить новую компанию, которая происходит в случае createCompanyClick

Maciej Los

ExceuteNonQuery используется для обновления базы данных. Если база данных не будет обновляться, то ничего не произойдет. Наконец, вы должны повторно привязать данные к объекту ListBox.

Maciej Los

5ед!