2016-11-22 5 views
0

あなたの助けが必要です。私は2つのExcelファイルを持っており、それらをdatagridviewに表示したい。私はdatagridviewが私のデータの1つだけをすべて表示するという問題を発見しました。私はこれらのようなデータを表示したい:1つのレコードのみがDatagridviewに表示されています。

これらは[Sheet1の$]

WSID   Lokasi  Saldo 
1234   A   200 
5678   B   300 

から自分のデータがあり、これらは私がMFラジオボタンを押すと[データ$]

WSID  Tipe Mesin Lokasi  
1234   MF   A   
5678   MF   B   
9876   CRM   C   

から私のデータであり、示されるデータは、MipeのTipe Mesin値を有するデータである。実際には1234と5678が表示されるはずですが、5678だけが表示されます。

private void TampilDataSaldo() 
     { 
      RadioButton[] radiobtn = new RadioButton[] { MFRB, CRMRB }; 



     string dir = LokasiSaldo.Text; 
      konek.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dir + ";Extended Properties='Excel 12.0 xml;HDR=YES;IMEX=1'"; 



koneksi.ConnectionString = string koneksi = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Dokumen\Alfon\Kerja\BCA\Program\Program-Pengisian-Uang-ATM-BCA-SOY\Program-Pengisian-Uang-ATM-BCA-SOY\bin\x86\Debug\ATM SLA SURABAYA.xlsx;Extended Properties='Excel 12.0 xml;HDR=YES';"; 

     int saldo; 
     Int32.TryParse(SaldoTB.Text, out saldo); 
     int thresholdcas; 
     Int32.TryParse(SaldoTB.Text, out thresholdcas); //baca angka yang diinput di NominalBox dan ubah jadi integer 

     OleDbConnection kon = new OleDbConnection(koneksi); 
     OleDbCommand command = kon.CreateCommand(); 
     OleDbCommand command1 = kon.CreateCommand(); 

     if(radiobtn[0].Checked) 
     { 
      kon.Open(); 
      command.CommandText = "select * from [Data$] where [Tipe Mesin] = '" + radiobtn[0].Text + "'"; 
      OleDbDataReader reader = command.ExecuteReader(); 

      while(reader.Read()) 
      { 
       konek.Open(); 
       System.Data.DataTable aksesdatatabel; 
       aksesdatatabel = konek.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       konek.Close(); 

       OleDbCommand command2 = new OleDbCommand 
       (
        "select WSID, Lokasi, Saldo from [Sheet1$] where WSID = '" + reader["WSID"].ToString() + "'", konek 
       ); 

       DataSet coba = new DataSet(); 
       OleDbDataAdapter adapter = new OleDbDataAdapter(command2); 
       adapter.Fill(coba); 

       var table = coba.Tables[0]; 
       var view = new DataView(table); 

       view.RowFilter = string.Format("Saldo < '{0}'", thresholdcas); 
       ViewDataSaldoGV.DataSource = view; 

      } 
      kon.Close(); 
      } 
} 
+1

dudeの場合、すべての行に対して新しいテーブル/ビューを作成します。ループ内を読み込み、ループの外側にビューを保存します。あなたはそれを処理できますか? – lordkain

+1

コードをデバッグすると、* data *が1つしかない理由がわかります。ループ内のデータソースをリセットしています。 – mybirthname

+0

ああ!どうもありがとうございます。私はそれをし、それは動作します!事前に感謝:) @ lordkain –

答えて

0

その他のコメントに記載されています。あなたは各項目をループしており、毎回新しいオブジェクトを作成するループの外のコレクションにデータを追加するのではなく、

whileループの外でデータセットを移動し、ループの内部に行を追加するだけでよいでしょう。この方法では、1つのコレクションを追加します。複数の1レコードのデータセットを作成して使用しないでください。

+0

ああ、あまりにもありがとうございます。私はそれをし、それは動作します!前もって感謝します :) –