DataGridView没有列
这是c#windows表单。
我有一个数据网格视图,应该显示两列,文件名和修改日期。 我这样做的方式是通过一项任务。 我还有一个只包含文件和路径名,bindingsource和数据网格视图的类。 此任务运行一个传递类的方法。 一旦任务完成,该类应该有一个网格视图,然后我可以在窗体上设置为gridview。
这个类看起来像这样:
class GetLogFilesParameters { public string FileNameandPath; public BindingSource BindingSource; public DataGridView GridView; public GetLogFilesParameters(string _fileNameAndPath) { FileNameandPath = _fileNameAndPath; BindingSource = new BindingSource(); GridView = new DataGridView(); GridView.DataSource = BindingSource; } }
我的任务调用的方法如下所示:
private static void GetLogFilesTest(GetLogFilesParameters FormFields) { Cursor.Current = Cursors.WaitCursor; try { //Setup data table DataTable FileList = new DataTable(); FileList.Clear(); DataColumn FileNameColumn = new DataColumn(); FileNameColumn.ColumnName = "FileName"; FileNameColumn.DataType = System.Type.GetType("System.String"); DataColumn DateColumn = new DataColumn(); DateColumn.ColumnName = "ModifiedDate"; DateColumn.DataType = System.Type.GetType("System.DateTime"); FileList.Columns.Add(FileNameColumn); FileList.Columns.Add(DateColumn); //Get a list of files in a directory string[] files = Directory.GetFiles(FormFields.FileNameandPath, "*.log"); //Loop through the files and fill the data table with a row for each foreach (string file in files) { FileInfo FileInformation = new FileInfo(file); DataRow row = FileList.NewRow(); row["FileName"] = FileInformation.Name; row["ModifiedDate"] = FileInformation.LastWriteTime; FileList.Rows.Add(row); } //FormFields.GridView.Columns.Add("FileName", "File Name"); //FormFields.GridView.Columns.Add("ModifiedDate", "Modified Date"); FormFields.GridView.AutoGenerateColumns = true; //Setup the binding source FormFields.BindingSource.DataSource = FileList; FormFields.BindingSource.Sort = "ModifiedDate DESC"; FormFields.GridView.Columns[0].Width = (FormFields.GridView.Width / 10) * 6; FormFields.GridView.Columns[1].Width = (FormFields.GridView.Width / 10) * 4; } catch (Exception ex) { string ErrorText = "Error trying to get the list of log files." + Environment.NewLine + Environment.NewLine; ExceptionLogger.LogIt(ErrorText, "Exception"); MessageBox.Show(ErrorText + ex.ToString()); } finally { Cursor.Current = Cursors.Default; } }
我的任务看起来像这样:
GetLogFilesParameters GetLogFilesParameters = new GetLogFilesParameters(EpicorSenderPath); Task tGetFiles1 = new Task(() => GetLogFilesTest(GetLogFilesParameters)); tGetFiles1.Start(); tGetFiles1.ContinueWith((antecedent) => { gvEpicorSenderFiles = GetLogFilesParameters.GridView; }, TaskScheduler.FromCurrentSynchronizationContext());
我得到的错误是System.ArgumentOutOfRangeException:索引超出范围。 必须是非负数且小于集合的大小。 它发生在这一行的方法中:
FormFields.GridView.Columns[0].Width = (FormFields.GridView.Width / 10) * 6;
发生这种情况是因为gridview根据调试没有任何列。 此外,当它有行和数据时。 我不知道出了什么问题。
我想(我完全不明白为什么)你试图访问尚不存在的列。
尝试在DataGridView.DataBindingComplete事件中移动这些代码行
上述就是C#学习教程:DataGridView没有列分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
FormFields.GridView.Columns[0].Width = (FormFields.GridView.Width / 10) * 6; FormFields.GridView.Columns[1].Width = (FormFields.GridView.Width / 10) * 4;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958640.html