1

WindowsフォームアプリケーションにC#でVS2010を使用しています。

ExcelシートからDataSetにデータをロードする必要があります。DataSetデザイナを使用してDataSetを作成し、テーブルと列を手動で追加しました(FirstTable, Column1, Column2)。私は列に頻繁にアクセスするので、型指定されていないデータセットを使用する代わりに、型指定されたデータセットを使用する方がコードがはるかにクリーンになります。

FirstTableOleDBDataAdapterを使用し、Fill onを使用してDataTableにデータを入力したところ、Column1Column2で、Excelシートからの2つの追加列がありました(ExcelCol1, ExcelCol2)。したがって、同じExcel列の名前を(と呼んだ場合の代わりに)指定しない限り、デザイナFirstTableColumn1介して作成したDataColumnsにデータが入力されません。Column2ExcelCol1ExcelCol2

Excelからの列を無視し、すでに定義されているDataColumnsにデータを入力するようにDataSetに指示する方法はありますか?

それが不可能な場合は、DataConnectionを介してExcelシートを接続して、DataTablesのレイアウトを作成できますか?私がよくわからないのは、Excelファイルがユーザー定義であるということだけです。そのため、ユーザーはExcelファイルを参照してデータセットにデータを入力します。ただし、これらすべてのExcelファイルの列は常に同じです。したがって、型付きデータセットを使用してレイアウトをプリセットしたいと思います。

4

1 に答える 1

1

わかりました、私はそれを行う方法を理解したと思います。列名を割り当てるために手動でコーディングする必要があるため、これが最もクリーンな方法かどうかはわかりません。つまり、Excelの列名を無視する簡単な方法はありませんが、少なくとも型付きデータセットを使用することはできます。 。

このリンクでは、テーブルと列のマッピングについて説明します。これは、基本的に、Excelの列名の代わりに独自の列名を使用する場合に使用されます。

いくつか指摘したいので、次のコードを与えました。

と呼ばれるDataSetデザイナを介してDataSetを作成したと仮定しMyDataSet.xsdます。FirstTableColumn1と。で呼び出されるテーブルがありますColumn2。次に、次のコードをテーブルマッピングに使用できます

MyDataSet myDS = new MyDataset();
//Some query commands using OleDB to get data from Excel
OleDbDataAdapter myAdapter = new OleDbDataAdapter(<OleDbCommand>);
DataTableMapping tableMap = myAdapter.TableMappings.Add("Table", myDS.FirstTable.TableName);
tableMap.ColumnMappings.Add("ExcelCol1", myDS.FirstTable.Column1.ColumnName);
tableMap.ColumnMappings.Add("ExcelCol2", myDS.FirstTable.Column2.ColumnName);
myAdapter.Fill(myDS);
  1. "Table"Excelファイルからデータを読み取るとき、DataTableMappingステートメントでは、Excelファイルでシート名/テーブル名が異なっていても、ソース名は常にであることに気付きました。
  2. 型付きデータセットを利用するmyDS.FirstTable.TableNameには、列名の代わりに、のようなコマンドを使用できます。

    DataTableMapping tableMap = myAdapter.TableMappings.Add( "Table"、 "FirstTable");

したがって、DataSetのテーブル名または列名を変更すると、VSのリファクタリングユーティリティを使用できます。

これがお役に立てば幸いです。よりクリーンな解決策があれば、助けていただければ幸いですが、今のところこれで問題は解決しました。

于 2011-07-11T13:40:58.873 に答える