2017-06-08 60 views
0

我试图显示我从我的program.cs中的文本文件拉到DataGridView的数据,但是当我运行代码时,该表保持空白。C#DataGridView - 表未填充

我的另一个问题是,当窗体打开时,它会停止运行代码。

基本上,代码所做的是从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。显示你的form1的代码 – Stuart

+0

我解释了一些代码的功能,并添加了我的form1代码,但是我没有真正触及那个部分。没有Application.Run(新的form1())表单窗口不会打开 –

回答

0

1.Delete

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

dataGridView.DataSource = machines; 

2.At结束变化

Application.Run(new Form1()); 

的全过程到

Application.Run(new Form1(machines)); 

3.添加构造到Form 1:

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

你的节目基本上做的是它运行的表格,下载的zip文件,处理zip文件,仅此而已。

您需要在窗体的form_load事件或按钮单击事件而不是Main()中执行所有这些操作。

  1. 从代码的开头删除Application.Run(new form1)。不需要。
  2. 在最后一个Application.Run(新Form1)之前移动所有内容[请注意,'F'是正确的]到表单中的私有函数。我们称之为processFile()
  3. 在Form1_Load()事件中调用此processFile()。
  4. 将m分配给DataGridView的data属性,并调用DataGridView.Bind()将数据绑定到datagrid控件。

更新: 由于您有一个按钮和一个Button_Click事件,请将processFile()放入Button的click事件中。当显示形式,按一下按钮即可获得运行