DOBON.NETプログラミング道掲示板

No34189 の記事


■34189 / )  Re[4]: ListBoxにデータが表示されない
□投稿者/ ケミカル 一般人(3回)-(2019/03/08(Fri) 18:11:29)
  • アイコン
    何度もすいません。実際のコードは下記にあるような感じになっています。
    Load時にデータベースにはデータがあるものとして、ListBox1にはデータが
    表示されます。
    
    @こちらは正しく動きます。
    ・Button1を実行
    ・Button2を実行(データベースにデータが存在する場合、ListBox2にデータが表示される)
    ・Button1を実行
    ・ListBox2に追加でデータが表示されます
    
    Aこちらは正しく動きません
    ・Button1を実行
    ・Button2を実行(データベースにデータが存在しない場合、ListBo2にデータは何も表示されない)
    ・Button1を実行
    ・ListBox2に追加でデータが表示されない。ただし、実際にはdataTable2にデータは格納されている。
    
    using System;
    using System.Data;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            //----------------------------
            // dataTable1の構造とDataTable2の構造は違います。
    
    
            public Form1()
            {
                InitializeComponent();
            }
    
            //普通のDataTable
            DataTable dataTable1 = new DataTable();
            //型付データセット
            DataTable dataTable2 = new DataSet().Table;
    
            //Formロード
            private void Form1_Load(object sender, EventArgs e)
            {
                //リストボックスに表示
                var strSql = @"SELECT * FROM T where col1 = 'X'";
                dataTable1 = DoSomething.selectSQL(strSql);
                listBox1.DataSource = dataTable1;
                listBox1.DisplayMember = "column1";
    
                listBox2.DataSource = dataTable2;
                listBox2.DisplayMember = "column1";
            }
    
            //選択されたListBox1の値をListBox2に表示させる
            private void button1_Click_1(object sender, EventArgs e)
            {
                var row = listBox1.SelectedItem as DataRowView;
                dataTable2.Rows.Add(row["column1"].ToString());
            }
    
            //ListBox2に新しくデータをセットする
            private void button2_Click_1(object sender, EventArgs e)
            {
                var strSql = @"SELECT * FROM T where col1 = 'Y'";
                dataTable2.Clear();
                dataTable2 = DoSomething.selectSQL(strSql);
                listBox2.DataSource = dataTable2;
                listBox2.DisplayMember = "column1";
            }
        }
    
            class DoSomething  //こちらはClassファイルとして別で本当は持っています
            {
                public static DataTable selectSQL(string sql)
                {
                    DataTable dt = new DataTable();
    
                    using (var con = new SqlConnection("Data Source = datasource"))
                    {
                        con.Open();
                        using (SqlCommand command = new SqlCommand(sql, con))
                        {
                            using (SqlDataAdapter adapter = new SqlDataAdapter())
                            {
                  //実行時にDBにデータが無いとButton2を押してもデータがListBox2に表示されない
                                adapter.SelectCommand = command;
                                adapter.Fill(dt);
                                return dt;
                            }
                        }
                    }
                }
            }
    }

違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -