0

最初の数列に CSV ファイルのデータを入力したい

私が使用しているコード:

...
   DataTable dataTable = (DataTable)readCsvTable(openFileDialog1.FileName);
   if (dataTable != null) dataGridViewQuestions.DataSource = dataTable; 
...


 private DataTable readCsvTable(string filename) 
    {
        DataTable dtDataSource = new DataTable();

        try
        {
            string[] fileContent = File.ReadAllLines(filename);

            if (fileContent.Count() > 0)
            {
                //Create data table columns
                string[] columns = fileContent[0].Split(',');
                for (int i = 0; i < columns.Count(); i++)
                {
                    dtDataSource.Columns.Add(columns[i]);
                }

                //Add row data
                for (int i = 1; i < fileContent.Count(); i++)
                {
                    string[] rowData = fileContent[i].Split(',');
                    dtDataSource.Rows.Add(rowData);
                }
            }
        }
        catch (Exception ex) {
            ...
            //error msgbox
            ...
            return null;
        }
        return dtDataSource;
    }

問題:

AutoGenerateColumns = true の場合 - コードにより、追加の列 (同じアプリケーションによってエクスポートされたファイルの場合、DataGridView に既にある最初のいくつかの列と同じ名前) が gridView に追加され、適切なデータが入力されます。

AutoGenerateColumns = false の場合 - 上記のコードは正しい数の行をテーブルに追加し、新しい列は追加されませんが、行は空です。

すでに試しました:

列の HeaderText と列のコントロール名で CSV ファイルの列を呼び出し、DataGridView と同じ列数の CSV ファイルを作成し、列数の少ないファイルを作成しても、違いはありません。

4

2 に答える 2

1

When "AutoGenerateColumns = true" から入力されたデータがそれを使用する場合。前の列が問題である場合は、そのデータグリッドビューに新しいインスタンスを作成できます。

...
if (dataTable != null)
{
    dataGridViewQuestions = new DataGridView();
    dataGridViewQuestions.DataSource = dataTable;
}
...
于 2013-03-05T08:22:57.613 に答える
1

これをシミュレートしてみましたが、期待どおりに動作します。ファイルを切り替えるときにスローされる例外はありますか?

ファイルを解析する前にデータソースを null に設定してみて、そこまで到達したかどうかを確認できますか?

dataGridViewQuestions.DataSource = null;
DataTable dataTable = readCsvTable(openFileDialog1.FileName);
if (dataTable != null) 
     dataGridViewQuestions.DataSource = dataTable; 
于 2013-03-05T08:12:50.200 に答える