Member 12349103 Ответов: 1

Как выбрать combobox из базы данных sqlite


У меня есть winform, подключенный к базе данных sqlite, в базе данных есть 2 таблицы (база данных и команды). У меня есть combobox, когда выбрана необходимость показать, что находится в базе данных команд. Я не могу понять, как это показать. Мой код ниже, что я делаю не так? Я не получаю никаких ошибок, просто пустой combobox.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Collections;
using System.Data.SqlClient;

namespace Game_Schedule
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }

      //  private int i = 0;

        private SQLiteConnection sql_con;
        private SQLiteCommand sql_cmd;
        private SQLiteDataAdapter DB;
        private DataSet DS = new DataSet();
        private DataTable DT = new DataTable();

        private void Form1_Load(object sender, EventArgs e)
        {
            LoadData();
        //    fillcomobo();
            
        }

        // combobox to select from
        protected void FillCombobox()
        {
            sql_con = new SQLiteConnection
                ("Data Source=GameDay.db;Version=3;new=False;Compress=True;");
            SQLiteConnection conn = new SQLiteConnection(sql_con);
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                string CommandText = "select Teams from Team_Names ";
                SQLiteDataAdapter da = new SQLiteDataAdapter();
                DB = new SQLiteDataAdapter(CommandText, sql_con);
                DS.Reset();
                da.SelectCommand = sql_cmd;
                DB.Fill(DS);
                cb_Home.DisplayMember = "Team_Names";
              //  cb_Home.ValueMember = "ID";
                cb_Home.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                //Exception Message
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
                    

            #region  Drop Down

        //    //fill combox column
        //    private void fillcomobo()
        //{
        //    //add combox column
        //    DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
        //    combo.HeaderText = "Date";
        //    combo.Name = "combo";
        //    ArrayList row = new ArrayList();

        //    // add item to arraylist from datatable
        //    foreach (DataRow dr in DT.Rows)
        //    {
        //        row.Add(dr["Date"].ToString());
        //    }

        //    //add to combo
        //    combo.Items.AddRange(row.ToArray());

        //    //add the combo column
        //    dataGridView1.Columns.Add(combo);

        //}

        #endregion

        //Set Connection
        private void SetConnection()
        {
            sql_con = new SQLiteConnection
                ("Data Source=GameDay.db;Version=3;new=False;Compress=True;");
        }

        //set executequery
        private void ExcuteQuery(string txtQuery)
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandText = txtQuery;
            sql_cmd.ExecuteNonQuery();
            sql_con.Close();

        }

        //set loadDB
        private void LoadData()
        {
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = "select * from DataBase";
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            DS.Reset();
            DB.Fill(DS);
            DT = DS.Tables[0];
            dataGridView1.DataSource = DT;
            sql_con.Close();
        }

        #region Team Information

        private void teamToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Teams t = new Teams();
            t.Show();
            this.Visible = true;
        }

               

private void btn_Save_Click(object sender, EventArgs e)
        {
            
            string txtQuery = "insert into DataBase (Date,Time,Home,Away,Location,Win)values('" + tb_Date.Text + "','" +tb_Time.Text + "','" + cb_Home.Text + "', '"+ cb_Away.Text + "', '" + tb_Location.Text + "', '" + tb_Win.Text + "')";
            ExcuteQuery(txtQuery);
            LoadData();
            tb_Home.Clear();
            tb_Away.Clear();
           // tb_Location.Clear();
           // tb_Win.Clear();
        }
    }
}
#endregion


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

// combobox to select from
        protected void FillCombobox()
        {
            sql_con = new SQLiteConnection
                ("Data Source=GameDay.db;Version=3;new=False;Compress=True;");
            SQLiteConnection conn = new SQLiteConnection(sql_con);
            DataSet ds = new DataSet();
            try
            {
                conn.Open();
                string CommandText = "select Teams from Team_Names ";
                SQLiteDataAdapter da = new SQLiteDataAdapter();
                DB = new SQLiteDataAdapter(CommandText, sql_con);
                DS.Reset();
                da.SelectCommand = sql_cmd;
                DB.Fill(DS);
                cb_Home.DisplayMember = "Team_Names";
              //  cb_Home.ValueMember = "ID";
                cb_Home.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                //Exception Message
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }

1 Ответов

Рейтинг:
12

Richard MacCutchan

SQLiteDataAdapter da = new SQLiteDataAdapter();   // DataAdapter is da
DB = new SQLiteDataAdapter(CommandText, sql_con); // now it is DB
DS.Reset();    
da.SelectCommand = sql_cmd;  // now it is da again
DB.Fill(DS);                 // and now it is DB again

Ваш код очень запутан


Member 12349103

Спасибо за ответ, я попробовал это сделать, но мне кажется, что я смотрю не на ту таблицу.
Имя базы данных таблицы GameDay внутри-это база данных и команды. ComboBox смотрит на команды. Есть предложения?

охраняемых недействительными FillCombobox()
{
sql_con = новое соединение SQLiteConnection
("Источник данных=GameDay.db;версия=3;new=False;Compress=True;");

SQLiteConnection conn = новый SQLiteConnection(sql_con);
DataSet ds = новый набор данных();
пробовать
{
sql_con.Открыть();
sql_cmd = new SQLiteCommand("select ID,Team_Name from GamnDay group by ID,TeamNames", sql_con);
SQLiteDataAdapter DB = новый SQLiteDataAdapter();
ДБ.Команды selectcommand = sql_cmd;
ДБ.Заполнить(ДС);
cb_Home.DisplayMember = "Team_Names";
cb_Home.ValueMember = "ID";
cb_Home.DataSource = DS.Tables[0];
}

поймать (исключение бывший)
{

}
наконец
{
// sql_con.Открыть();
// sql_con.Закрывать();

}
}

Richard MacCutchan

Посмотрите на ваши объявления переменных. Вы объявляете несколько наборов данных, SQLiteDataAdapter и т. д. видах, а Да, ДБ, ДС, ДС. До этого вы будете продолжать есть проблемы.

Member 12349103

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

охраняемых недействительными FillCombobox()
{
sql_con = новое соединение SQLiteConnection
("Источник данных=GameDay.db;версия=3;new=False;Compress=True;");

Установитесвязь();
sql_con.Открыть();
sql_cmd = sql_con.CreateCommand();
строка CommandText = "select * from Teams";
DB = новый SQLiteDataAdapter(CommandText, sql_con);
ДС.Сбросить();
ДБ.Заполнить(ДС);
DT = DS.таблицы[0];
cb_Home.DisplayMember = "Team_Names";
cb_Home.ValueMember = "Team_Names";
cb_Home.DataSource = DS.Tables[0];
sql_con.Закрывать();

}