-2

OleDbDataReader を使用して、MS Access 2010 のテーブルからレコードを取得しようとしています。場合によっては、レコードを取得しているテーブルに、指定されたクエリの複数のレコードが含まれています。例: 2 つのテーブル。Ist テーブルには 2 つの列があります。1 つは名前 (主キー) で、もう 1 つは数字です。2 番目のテーブルには多くのフィールドが含まれています。1 つは外部キーとしての Name フィールドです。クエリが両方のテーブルで 1 つのレコードを返すレコードに一致する場合もありますが、1 番目のテーブルからは 1 つのレコードがあり、2 番目のテーブルからは多くのレコードがある場合もあります。したがって、私のデータリーダーは、テキスト ボックスにデータを入力するレコードの 1 つだけを取り込みます。そこで、これらの複数のレコードをリストボックスに入れる方法を見つけたいと思い、このフォーラムで質問しました。与えられた答えは、LINQ を使用して「結果を List/IEnumerable に入れる」ことでした。それだけ簡単だったらいいのに。私は List/IEnumerable を取り入れようとしましたが、後戻りするだけでなく、ますます混乱しています。私の理解では、まったく新しいクラス、コンストラクター、メソッドのセットなどを作成し、任意の型 (int、string など) を取るリストを作成する必要があります。これは正しいです?私の新しいクラスはで始まりますか

public class myList : IEnumerable<T>
{
    public IEnumerable<T> GetEnumerator() 
    {
        foreach (object o in objects) 
        {
            yield return 0;
        }
    }
}

Form クラスの内部メソッド

while (myreader.Read())
{
    foreach (object o in myList) //do something
}

T は任意の型ですが、それ以外の場合は int または string を使用しますか?

4

2 に答える 2

0

これは少し混乱しています...つまり、基本的にテーブルには親子関係があります。うまくいけばあなたの問題を解決する非常によく似たチュートリアルがあります。それがデータの読み取り方法です

ArrayList rowList = new ArrayList();
SqlDataReader reader = storedProcCommand.ExecuteReader();
while (reader.Read())
{
   object[] values = new object[reader.FieldCount];
   reader.GetValues(values);
   rowList.Add(values);
}

これは値が ListView に追加される方法です

orderDetailsList.Items.Clear();

foreach (object[] row in rowList)
{
   string[] orderDetails = new string[row.Length];
   int columnIndex = 0;

   foreach (object column in row)
   {
        orderDetails[columnIndex++] = Convert.ToString(column);
   }

   ListViewItem newItem = new ListViewItem (orderDetails);
   orderDetailsList.Items.Add (newItem);
}

出力はこのようなものです... ここに画像の説明を入力

于 2013-07-26T15:11:56.290 に答える
0

私があなたを正しく理解していれば、名前が別のテーブル (Table1) の 1 つのレコードの名前と一致する 1 つのテーブル (Table2 と呼びます) からすべてのレコードを取得しようとしていますか? LINQ と SQL データベースを使用して、これを頻繁に行います。

すでにデータベースへの接続があると仮定しています。Table1 から目的のレコードを取得するメソッドを作成しましたか? もしそうなら、あなたはすでに名前を持っています。したがって、次のような別のメソッドを作成します。

public List<Table2> GetList(string name)
{
    List<Table2> list = new List<Table2>();
    list = db.Table2.Where(q => q.NameField = name).ToList();
    return list;
}

次に、コントロールにデータを入力するときにこのメソッドを呼び出し、リストを表示する任意のコントロールにリストをデータバインドできます。だから、このようなもの:

List<Table2> list = new List<Table2>();
list = GetList("This is the name from the Table1 data");
listviewcontrol.DataSource = list;

コントロールにデータを入力する方法は、使用しているコントロールによって少し異なります。編集: Rwiti には、リストビューにデータを追加するための適切なコードがいくつかあります。

Table2 レコードのリストからデータの一部だけを表示したい場合 (たとえば、コンボボックスに入力する Location フィールド)、次のようにすることをお勧めします。

List<string> locations = new List<string>();
foreach (Table2 record in list)
{
    locations.Add(record.Location);
}
comboBox1.DataSource = locations;
于 2013-07-26T15:14:59.233 に答える