C#DataGridView没有从单独的表单填充

问题描述:

如果我的标题不好,它的1:30上午,我全部用完咖啡,我很抱歉。我已经尝试了几个类似问题的解决方案,但我无法弄清楚,因为我的情况有点不同。C#DataGridView没有从单独的表单填充

我想要使用一个单独的窗体来选择参数的方法,我用它来格式化数据传递到原始窗体DataGridView,但它不填充DataGridView。我已经将新窗体设置为对话框,它在被调用时接收到原始窗体引用,窗体上有一个DateTimePicker和一个按钮,当单击该按钮时它调用一个获取日期时间值的方法,然后它调用原始表单上的方法将datetime参数传递给它并关闭对话框。原始表单上的方法使用传递给DataGridView的数据的参数运行,然后调用传递绑定列表的数据源方法。

这种使用对话框填充DataGridView的方法是我最好的解释,它是如何解释在这个网站的类似问题,但它没有填充我的DataGridView。任何帮助将不胜感激。

这里是我的代码:

private void button1_Click(object sender, EventArgs e) 
    { 
     SearchDialog search = new SearchDialog(this); 
     search.Show(); 
    } 

)BUTTON2是一个取消按钮(

public partial class SearchDialog : Form 
{ 
    static DirectoryInfo DexFolder = new DirectoryInfo(Properties.Settings.Default.DexFolderPath); 
    static DirectoryInfo ExcelFile = new DirectoryInfo(Properties.Settings.Default.ExcelFilePath); 

    public SearchDialog(Main form) 
    { 
     InitializeComponent(); 
     fromDateSelector.Checked = false; 
     toDateSelector.Checked = false; 
     MainForm = form; 
    } 

    public Main MainForm {get; set;} 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     SearchParameters(); 
     Close(); 
    } 

    private void SearchParameters() 
    { 
     DateTime allTime = DateTime.Now.AddYears(-150); 
     DateTime current = DateTime.Now; 
     if (fromDateSelector.Checked == true) 
     { 
      allTime = fromDateSelector.Value; 
     } 
     if (toDateSelector.Checked == true) 
     { 
      current = toDateSelector.Value; 
     } 
     MainForm.GetFiles(DexFolder, current, allTime); 
    } 
} 

主要形式(背面)

public void GetFiles(DirectoryInfo FilePath, DateTime from, DateTime to) 
    { 
     List<string> DexFileNames = new List<string>(); 
     List<string> DexData = new List<string>(); 
     IList<FileManagerView> fileManagerData = new BindingList<FileManagerView>(); 

     string[] ExcelData = File.ReadAllLines(ExcelFile.ToString()); 

     foreach (FileInfo fileInfo in FilePath.GetFiles("*.dex")) 
     { 
      DexFileNames.Add(fileInfo.Name); 
     } 

     foreach (string DexFileName in DexFileNames) 
     { 
      DateTime dexDate = File.GetCreationTime(FilePath + DexFileName); 
      string[] NameData = DexFileName.Split('_', '-', '.'); 
      if (NameData.Length > 2) 
      { 
       dexDate = DateTime.ParseExact(NameData[1] + NameData[2], "yyyyMMddHHmmss", CultureInfo.InvariantCulture); 
      } 
      string DexPHYSID = NameData[0]; 
      string machineNumber = ""; 
      string machineLocation = ""; 
      string telemetryDevice = ""; 
      string routeNumber = ""; 
      string machinePHYSID = ""; 
      string driverName = ""; 

      foreach (string line in ExcelData) 
      { 
       string[] lineData = line.Split(','); 
       if (DexPHYSID == lineData[14].Trim('"')) 
       { 
        machinePHYSID = lineData[14].Trim('"'); 
        machineNumber = lineData[0].Trim('"'); 
        machineLocation = lineData[2].Trim('"'); 
        string RouteNumberFull = lineData[17].Trim('"'); 
        string[] DriverName = lineData[18].Trim('"').Split('('); 
        telemetryDevice = lineData[8].Trim('"'); 
        string[] RouteNumberData = RouteNumberFull.Split(' '); 
        driverName = DriverName[0]; 
        try 
        { 
         routeNumber = RouteNumberData[1] + " " + RouteNumberData[2]; 
        } 
        catch 
        { 

        } 
       } 
      } 

      if (DexPHYSID == machinePHYSID) 
      { 
       FileManagerView fileManagerView = new FileManagerView(); 


       if (dexDate.ToString("dd-MM-yy") == from.ToString("dd-MM-yy") && dexDate.ToString("dd-MM-yy") == to.ToString("dd-MM-yy")) 
       { 
        fileManagerView.machineNumber = machineNumber; 
        fileManagerView.machineLocation = machineLocation; 
        fileManagerView.telemetryDevice = telemetryDevice; 
        fileManagerView.physid = DexPHYSID; 
        fileManagerView.routeNumber = routeNumber; 
        fileManagerView.date = dexDate; 
        fileManagerView.driver = driverName; 
        fileManagerData.Add(fileManagerView); 
       } 
      } 
     } 

     FileManagerPopulate(fileManagerData); 
    } 

    public class FileManagerView 
    { 
     public string machineNumber { get; set; } 
     public string machineLocation { get; set; } 
     public string telemetryDevice { get; set; } 
     public string physid { get; set; } 
     public string routeNumber { get; set; } 
     public string driver { get; set; } 
     public DateTime date { get; set; } 
    } 

    public void FileManagerPopulate(IList<FileManagerView> data) 
    { 
     dataGridView1.DataSource = data; 
    } 
+0

你可能会注意到从/到日期时间被混淆了,这是因为我正在测试我把它们混合起来的可能性:) –

所以问题是使用==操作数而不是>和<当GetFiles()方法检查文件日期是否在选择范围内时特德范围。

我打算在此留下它,因为它可能会帮助其他人寻找答案。