2017-06-08 12 views
0

私はprogram.cs内のテキストファイルからDataGridViewにプルするデータを表示しようとしていますが、コードを実行するとテーブルは空白のままです。C#DataGridView - テーブルにデータが入力されていません

私がもう1つ持っている問題は、フォームが開くときにコードを実行しなくなることです。

基本的には、sftpサーバーから.zipファイルをダウンロードし、テキストファイルを解凍し、各行を配列に追加し、特定の行を配列に分割します。私は配列の変数を自分のフォームのDataGridViewに表示させようとしています。ここで

は私のコードです:

class Machine 
{ 
    public string MacNum { get; set; } 
    public string CashCount { get; set; } 
    public string VendCount { get; set; } 
} 

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     string zipTemp = (@"C:\Users\mark\Desktop\Project Dex\zipTemp\"); 

     string machineCashCount = (""); 
     string hostIP = ("0.0.0.0"); 
     string userName = ("UN"); 
     string passWord = ("PW"); 
     string remotePath = (@"/home/dex/RESPONSE/PROCESSED"); 
     string localPath = (@"C:\Users\mark\Desktop\Project Dex\Temp\PROCESSED\"); 

     Application.Run(new Form1()); 
     DataGridView dataGridView = new DataGridView(); 
     IList<Machine> machines = new BindingList<Machine>(); 
     dataGridView.DataSource = machines; 

     SessionOptions sessionOptions = new SessionOptions 
     { 
      Protocol = Protocol.Sftp, 
      HostName = hostIP, 
      UserName = userName, 
      Password = passWord, 
      PortNumber = 22, 
      SshHostKeyFingerprint = "ssh-rsa 2048 96:48:96:52:8c:e7:de:c6:e1:00:08:7e:db:ad:e4:06" 
     }; 

     using (Session session = new Session()) 
     { 
      session.Open(sessionOptions); 

      TransferOptions transferOptions = new TransferOptions(); 
      transferOptions.TransferMode = TransferMode.Binary; 

      session.GetFiles(remotePath, @"C:\Users\mark\Desktop\Project Dex\Temp\").Check(); 
     } 

     DirectoryInfo directorySelected = new DirectoryInfo(@"C:\Users\mark\Desktop\Project Dex\Temp\PROCESSED\"); 
     List<string> fileNames = new List<string>(); 

     foreach (FileInfo fileInfo in directorySelected.GetFiles("*.zip")) 
     { 
      fileNames.Add(fileInfo.Name); 
     } 

     foreach (string fileName in fileNames) 
     { 
      string zipFilePath = localPath + fileName; 

      using (ZipFile zip1 = ZipFile.Read(zipFilePath)) 
      { 
       var selection = (from e in zip1.Entries 
           where (e.FileName).StartsWith("01e") 
           select e); 

       Directory.CreateDirectory(zipTemp); 

       foreach (var e in selection) 
       { 
        e.Extract(zipTemp, ExtractExistingFileAction.OverwriteSilently); 
       } 
      } 

      DirectoryInfo dexDirect = new DirectoryInfo(@"C:\Users\mark\Desktop\Project Dex\zipTemp\"); 
      List<string> dexName = new List<string>(); 

      foreach (FileInfo dexInfo in dexDirect.GetFiles("*.dex")) 
      { 
       dexName.Add(dexInfo.Name); 
      } 

      foreach (string dexNames in dexName) 
      { 
       string dexFilePath = zipTemp + dexNames; 

       string[] lines = System.IO.File.ReadAllLines(dexFilePath); 

       foreach (string line in lines) 
       { 
        machineCashCount = Array.Find(lines, 
         element => element.StartsWith("VA1", StringComparison.Ordinal)); 
       } 
       string[] MCC1 = machineCashCount.Split('*'); 
       string[] nm = dexNames.Split('.'); 

       int nam = int.Parse(nm[0], System.Globalization.NumberStyles.HexNumber); 

       // Console.WriteLine((nam + (":") + "Total cash count: ") + MCC1[1]); 
       // Console.WriteLine((nam + (":") + "Number of paid vends: ") + MCC1[2]); 

       Machine m = new Machine(); 

       m.MacNum = nm[0]; 
       m.CashCount = MCC1[1]; 
       m.VendCount = MCC1[2]; 
       machines.Add(m); 
      } 
     } 

     Application.Run(new Form1()); 
    } 
} 

をForm1:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    public void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

    } 
} 
+0

は、あなただけの最後にそこに新しい 'Form1'を生成していませんか?あなたはForm1の内容で何かをしてはいけないのですか?_ここの詳細は十分ではありません。 – gravity

+1

Main()で作成しているDataGridにはMain()メソッドのスコープがあります。これは、dataGridViewを作成することは非常にうまくいくかもしれませんが、それはform1が表示するDataGridViewではありません。フォーム1のコードを表示 – Stuart

+0

Iveはコードが何をしているかを説明し、フォーム1のコードを追加しましたが、実際にその部分に触れていません。 Application.Run(new form1())を使用しない場合、フォームウィンドウは開きません –

答えて

0

1.Deleteを実行しているプロセス全体を取得するには、ボタンをクリックしてください〜

Form1に3210

3.Addコンストラクタ:

public Form1(IList<Machine> machines) 
{ 
    InitializeComponent(); 
    dataGridView1.DataSource = machines; 
} 
0

あなたのプログラムは基本的に何をしているか、それは、フォームを実行したzipファイルをダウンロードし、zipファイルを処理し、それはそれだです。

フォームのform_loadイベントまたはMain()ではなく、button clickイベントですべてこれを行う必要があります。

  1. コードの先頭からApplication.Run(新しいフォーム1)を削除します。不要です。
  2. 最後のApplication.Run(新しいForm1)の前のすべてを移動します。[これは正しいFであることに注意してください]フォーム内のプライベート関数に。これをprocessFile()と呼びましょう。
  3. このprocessFile()をForm1_Load()イベントで呼び出します。
  4. DataGridViewのデータプロパティにmを割り当て、DataGridView.Bind()を呼び出して、データグリッドコントロールにデータをバインドします。

更新: ボタンとButton_Clickイベントがあるので、processFile()をButtonのclickイベントに配置します。フォームが表示されたら、最後の変更

Application.Run(new Form1()); 

2.At

Application.Run(new Form1()); 
DataGridView dataGridView = new DataGridView(); 

dataGridView.DataSource = machines; 

関連する問題