2011-06-20 8 views
40

絶対初心者の質問:WPFでデータセットからデータを読み取るにはどうすればよいですか?私はちょうど2列の列車のスケジュール表を持っており、出発時間を読み、次の列車がいつ出発するかを計算できるようにしたい。たとえば、今は12時29分です。私のアプリケーションは、次の列車が12時33分に出発することを教えてください。DataSetを読み取る

私はすでにGoogleとGoogleのgoogled。私は.NET 3.5です。

おかげ

+1

ここでの主な質問は次のとおりです。このデータセットをどこで読んでいますか?コードですか? XAMLで?データグリッドでは?リストビューで? – Damascus

+0

回答があなたの質問に答えた場合は、それを受け入れられた回答としてマークする必要があります。 – reggaeguitar

答えて

19

dsはDataSetがある場合は、のようなもので、最初のテーブルの最初の行のCustomerID列にアクセスすることができます:あなたはできるdatebaseこれがSQL Serverからのものである場合

DataRow dr = ds.Tables[0].Rows[0]; 
Console.WriteLine(dr["CustomerID"]); 
1

問題のクエリのこの種の... DepartureTime> GETUTCDATE(TrainScheduleから

選択トップ1 DepartureTime)DepartureTime ASCことで 注文

GetDate()も使用できますが、日付の保存方法は不明です。

どのようにデータが保存され、読み取られるかわかりません。

96

DataSetはデータベースに似ています。 DataTableはデータベーステーブルに似ており、DataRowはテーブルのレコードに似ています。フィルタリングオプションまたはソートオプションを追加する場合は、DataViewオブジェクトを使用して、別のDataTableオブジェクトに変換して戻します。

データベースを使用してデータを格納している場合は、最初にデータベーステーブルをメモリ内のDataSetオブジェクトにロードします。 DataSetに複数のデータベーステーブルをロードして、DataSetDataTableオブジェクトから読み取る特定のテーブルを選択することができます。その後、DataTableからDataRowの特定の行のデータを読み取ります。以下のコードは、手順を示します

SqlCeDataAdapter da = new SqlCeDataAdapter(); 
DataSet ds = new DataSet(); 
DataTable dt = new DataTable(); 

da.SelectCommand = new SqlCommand(@"SELECT * FROM FooTable", connString); 
da.Fill(ds, "FooTable"); 
dt = ds.Tables["FooTable"]; 

foreach (DataRow dr in dt.Rows) 
{ 
    MessageBox.Show(dr["Column1"].ToString()); 
} 

行で特定のセルを読み取るには:

int rowNum // row number 
string columnName = "DepartureTime"; // database table column name 
dt.Rows[rowNum][columnName].ToString(); 
+2

非常に役立ち、説明に従うのは簡単です。一部の人々は、はっきりと簡潔に考え、それを示します。ありがとう。 – Danrex

+0

これを読んでいる別のC#noobとして、DataTableを実際にコーディングしようとするまで私は興奮していました。いくつかの狩りの後、私は 'using System.Data;'ステートメントが必要であることを発見しました。 – Cory

+0

プログラムは実際にデータベースからフェッチしますか? –

1

データセットがデータベースからアクセスされたデータのコピーであり、それでもにデータベースを必要としませんまったく使用しないでください。しかし、それが好ましい。

新しいアプリケーションを作成する場合は、DataSetが優先されないため、Entity FrameworkやNHibernateなどのORMの使用を検討してください。しかし、彼らはまだサポートされていて、私が言うことができる限り、すぐに逃げることはありません。

標準データセットから読んでいるなら、@ KMCの答えはあなたが探しているものです。ただし、これを行う適切な方法は、強力な型指定のデータセットを作成し、それを使用してIntellisenseを利用できるようにすることです。 Entity Frameworkを使用していないと仮定して、続行します。

プロジェクトやApp_Dataフォルダなど、データアクセスレイヤに専用のスペースがない場合は、今すぐ作成することをお勧めします。それ以外の場合は、データプロジェクトフォルダの下で次のように実行します。 追加>新しい項目の追加>データセット。作成されるファイルの拡張子は.xsdになります。

次に、DataTableを作成する必要があります。 DataTableを作成します(ファイルをクリックし、デザインウィンドウを右クリックします。拡張子は.xsdです)。「追加」>「DataTable」をクリックします。いくつかの列を作成します(作成したデータテーブルを右クリック>追加>列)。最後に、データにアクセスするためのテーブルアダプタが必要です。データセットで参照されるデータにアクセスするには、データベースへの接続をセットアップする必要があります。

作業が完了したら、プロジェクト内のデータセット(ステートメントを使用)を正常に参照した後、IntellisenseでDataSetにアクセスできます。これは、型指定されていないデータセットよりもはるかに簡単です。

可能であれば、型の指定されていないデータセットではなく、厳密に型指定されたデータセットを使用します。作成する作業が増えても、後でインテリセンスで多くの時間を節約できます。上記の例では、あなたの、厳密に型指定されたDataSetがNextTrainDepartureTimeという名前のDateTime型の列を持っていることを前提としてい

MyStronglyTypedDataSet trainDataSet = new MyStronglyTypedDataSet(); 
DataAdapterForThisDataSet dataAdapter = new DataAdapterForThisDataSet(); 
//code to fill the dataset 
//omitted - you'll have to either use the wizard to create data fill/retrieval 
//methods or you'll use your own custom classes to fill the dataset. 
if(trainDataSet.NextTrainDepartureTime > CurrentTime){ 
    trainDataSet.QueueNextTrain = true; //assumes QueueNextTrain is in your Strongly-Typed dataset 
} 
else 
    //do some other work 

:あなたのような何かを行うことができます。希望が助けてくれる!

関連する問題