将.CSV文件导入DataGrid WPF,C# [英] Import .CSV File into DataGrid WPF,C#

查看:198
本文介绍了将.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆