簡體   English   中英

C#DataGridView-表未填充

[英]C# DataGridView - Table is not populating

我正在嘗試顯示從program.cs中的文本文件提取到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)
    {

    }
}

程序的基本操作是運行Form,下載zip文件,處理zip文件,僅此而已。

您將需要在表單的form_load事件或按鈕單擊事件而不是Main()中完成所有這些操作。

  1. 從代碼的開頭刪除Application.Run(new form1)。 不需要。
  2. 將所有內容移到最后一個Application.Run(new Form1)之前[注意,這是正確的'F']移到表單內的私有函數。 我們稱之為processFile()
  3. 在Form1_Load()事件中調用此processFile()。
  4. 將m分配給DataGridView的data屬性,然后調用DataGridView.Bind()將數據綁定到datagrid控件。

更新:由於您有一個按鈕和一個Button_Click事件,因此將processFile()放入按鈕的click事件中。 顯示表單時,單擊按鈕以使整個過程運行

1.Delete

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

dataGridView.DataSource = machines;

2.最后換

Application.Run(new Form1());

Application.Run(new Form1(machines));

3,將構造函數添加到Form1中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM