在Windows窗体上,我有两个未绑定的数据网格视图列,每个列都有自己的标题,我尝试读取数据表中的csv文件并将其绑定到网格。
只有我不知道所涉及的逻辑。我不知道如何将数据绑定到2个数据网格视图列。关于如何将csv数据绑定到网格视图的示例很多,但是它们处理的是从文件内部读取的标头,而不是未绑定的标头,但这是与asp有关的。 Display data on grid view column programmatically
这是csv文件中的数据。
Address,76 Douglas St Wakecorn
Property name,Wakecorn University
Building,C Block
Room,C2.18
这是读取它的类的代码。
public class Setting
{
private DataTable _dt { get; set; }
public DataTable ProcessSettingFileCMD(string filePath)
{
if (_dt == null)
{
populateControlWithCSVData(filePath);
}
}
private void populateControlWithCSVData(string filePath)
{
_dt = new DataTable();
string[] lines = File.ReadAllLines(filePath);
if(lines.Length > 0)
{
for(int row = 1; row < lines.Length; row++)
{
string[] dataWords = lines[row].Split(',');
DataRow dr = _dt.NewRow();
foreach (string word in lines)
{
dr[word] = dataWords[row++];
}
_dt.Rows.Add(dr);
}
}
}
}
这是表格
private void mnuOpen_Click(object sender, EventArgs e)
{
openFD.InitialDirectory = "C:\\";
openFD.ShowDialog();
_dt = _objSetting.ProcessSettingFileCMD(openFD.FileName);
if (_dt.Rows.Count > 0)
{
gvSettings.DataSource = _dt;
}
}
返回的错误位于dr[word] = dataWords[row++];
System.ArgumentException:'列'Address,76 Douglas St Wakecorn' 不属于表。
答案 0 :(得分:0)
根据提供的指导和选项,我取出了设计器中创建的列,而是在读取CSV文件时将其实例化。
我还使用了CsvFileReader子类将其绑定到字符串列表,然后绑定到数据表。很有用! http://www.blackbeltcoder.com/Articles/files/reading-and-writing-csv-files-in-c
这是重写的代码。
设置表格。
[
{
"name": "Beginner",
"skills": [
{
"name": "Skill 2",
"checked": true
}
]
},
{
"name": "Intermediate",
"skills": [
{
"name": "Skill 1",
"checked": true
}
]
}
]
这又是设置类。
public partial class frmSettings : Form
{
protected string FileName;
protected bool Modified;
Setting _objSetting = new Setting();
OpenFileDialog openFD = new OpenFileDialog();
DataTable _dt = new DataTable();
public frmSettings()
{
InitializeComponent();
}
private void mnuOpen_Click(object sender, EventArgs e)
{
Cursor = Cursors.WaitCursor;
try
{
openFD.Title = "Open a CSV File";
if (SaveIfModified())
{
if (openFD.ShowDialog(this) == DialogResult.OK)
{
_dt = _objSetting.ProcessSettingFileCMD(openFD.FileName);
if (_dt.Rows.Count > 0)
{
gvSettings.DataSource = _dt;
}
}
}
FileName = openFD.FileName;
Modified = false;
}
catch (Exception ex)
{
Debug.WriteLine(String.Format("Error reading from {0}.\r\n\r\n{1}", FileName, ex.Message));
}
finally
{
Cursor = Cursors.Default;
}
}
}