我正在尝试将我从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)
{
}
}
答案 0 :(得分:0)
你的程序基本上做的是运行Form,下载zip文件,处理zip文件,就是这样。
您需要在表单的form_load事件或按钮单击事件而不是Main()中执行所有操作。
更新: 由于您有一个按钮和一个Button_Click事件,所以将processFile()放在Button的click事件中。显示表单时,单击按钮以使整个过程运行
答案 1 :(得分:0)
1.删除
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;
}