将.CSV文件导入DataGrid WPF,C# [英] Import .CSV File into DataGrid WPF,C#
本文介绍了将.CSV文件导入DataGrid WPF,C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在DataGrid中导入.CSV文件.谁能帮我解决我的错?
请在下面查看我的代码:
I want to import .CSV file in DataGrid. Can anyone help where I am wrong?
Please look at my code below:
private void button2_Click(object sender, RoutedEventArgs e)
{
try
{
lFnLoadFileData();
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Input string was not in correct format ,select other file");
}
}
void lFnLoadFileData()
{
Microsoft.Win32.OpenFileDialog lObjFileDlge = new Microsoft.Win32.OpenFileDialog();
lObjFileDlge.Filter = "CSV Files|*.csv";
lObjFileDlge.FilterIndex = 1;
lObjFileDlge.Multiselect = false;
string fName = "";
bool? lBlnUserclicked = lObjFileDlge.ShowDialog();
if (lBlnUserclicked != null || lBlnUserclicked == true)
{
fName = lObjFileDlge.FileName;
}
if (System.IO.File.Exists(fName) == true)
{
StreamReader lObjStreamReader = new StreamReader(fName);
lFnGenerateData(lObjStreamReader);
lObjStreamReader.Close();
}
}
void lFnGenerateData(StreamReader aReader)
{
bool lBlnIsColumns = true;
string[] lArrCols = null;
List<details> lstPersonalList = new List<details>();
dataGrid1.Columns.Clear();
while (aReader.Peek() != null)
{
string lStrLine = aReader.ReadLine();
if (lStrLine == null)
break;
if (lStrLine.Trim() == "")
continue;
string[] lArrStrCells = null;
lArrStrCells = lStrLine.Split(';');
if (lArrStrCells == null)
continue;
if (lBlnIsColumns)
{
lArrCols = lArrStrCells;
foreach (string lStrCell in lArrStrCells)
{
DataGridTextColumn lDGCol = new DataGridTextColumn();
lDGCol.Header = lStrCell;
lDGCol.Binding = new System.Windows.Data.Binding(lStrCell);
dataGrid1.Columns.Add(lDGCol);
}
lBlnIsColumns = false;
continue;
}
if (lArrCols == null)
continue;
Details dt = new Details();
dt.MyEnum= Enum.Parse(typeof(MyEnum),lArrStrCells[0]));
dt.DataTyp = lArrStrCells[1];
dt.Address = lArrStrCells[2];
dt.Comment = lArrStrCells[3];
lstPersonalList.Add(dt);
}
aReader.Close();
dataGrid1.ItemsSource = lstPersonalList;
}
public class Details
{
public enum MyEnum
{
one = 1,
two = 2,
three = 3
}
public MyEnum Value { get; set; }
public string DataTyp { get; set; }
public string Address { get; set; }
public string Comment { get; set; }
}
在此先感谢
thanks in advance
推荐答案
为什么要使用Stream Reader并遍历每一列.
让我解释一种简化的方法:
Why do you go with Stream Reader stuff and go through each and every column.
Let me explain a simplified approach:
void PopulateGrid()
{
Microsoft.Win32.OpenFileDialog lObjFileDlge = new Microsoft.Win32.OpenFileDialog();
lObjFileDlge.Filter = "CSV Files|*.csv";
lObjFileDlge.FilterIndex = 1;
lObjFileDlge.Multiselect = false;
string fName = "";
bool? lBlnUserclicked = lObjFileDlge.ShowDialog();
if (lBlnUserclicked != null || lBlnUserclicked == true)
{
fName = lObjFileDlge.FileName;
}
if (!System.IO.File.Exists(fName))
return;
this.SuspendLayout();
DataGridView dataGrid1 = new DataGridView();
dataGrid1.AutoGenerateColumns = true;
dataGrid1.AllowUserToDeleteRows = true;
dataGrid1.AllowUserToAddRows = true;
dataGrid1.AllowUserToOrderColumns = true;
dataGrid1.Height = 250;
dataGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGrid1.ScrollBars = ScrollBars.Both;
dataGrid1.Location = new System.Drawing.Point(10, 120);
dataGrid1.DataSource =this.GetData(fName, true);
this.Controls.Add(dataGrid1);
this.ResumeLayOut();
}
public DataTable GetData(string path, bool firstRowHeader)
{
if (!File.Exists(path))
return null;
string full = Path.GetFullPath(path);
string file = Path.GetFileName(full);
string dir = Path.GetDirectoryName(full);
string withHeaderconnString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=\"" + dir + "\\\";"
+ "Extended Properties=\"text;HDR=Yes;FMT=Delimited\"";
string NoHeaderconnString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=\"" + dir + "\\\";"
+ "Extended Properties=\"text;HDR=No;FMT=Delimited\"";
//create the "database" connection string
string connString = NoHeaderconnString;
if (firstRowHeader)
connString = withHeaderconnString;
//create the database query
string query = "SELECT * FROM " + file;
//create a DataTable to hold the query results
DataTable dTable = new DataTable("Contacts");
//create an OleDbDataAdapter to execute the query
OleDbDataAdapter dAdapter =
new OleDbDataAdapter(query, connString);
try
{
//fill the DataTable
dAdapter.Fill(dTable);
}
catch (InvalidOperationException /*e*/)
{ }
dAdapter.Dispose();
return dTable;
}
这篇关于将.CSV文件导入DataGrid WPF,C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文