2010-11-17 5 views
1

ツリービュー内の1つの親の子孫しか追加できない理由がわかりました。私はそれが私が忘れているシンプルなものだと確信していますが、私は少し困惑しています。私はループの周りに**を置くが、私は問題を抱えているが、そこに何か問題がある場合に備えて、残りのコードを含めた。データベースの要素をツリーに追加するネストされたループC#

コード:

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=PartsTree.accdb"; //2007 db format 
      //string connStr = @"Provider=Microsoft.JET.OLEDB.4.0; Data Source=PartsTree.accdb"; //2003 db format 
      try 
      { 
       using (OleDbConnection dbConn = new OleDbConnection(connStr)) 
       { 
        string queryString = "SELECT ID, parent_ID, description FROM Parts;"; //Note two semicolons 
        dbConn.Open(); 

        OleDbCommand dbCmd = dbConn.CreateCommand(); 
        dbCmd.CommandText = queryString; 
        OleDbDataReader rdr = dbCmd.ExecuteReader(); 

        int numberColumns = rdr.FieldCount; // How many columns are there in the DB 
        for (int x = 0; x < numberColumns; x++) 
        { 
         treeView1.Nodes.Add(rdr.GetName(x)); // Add a parent node to the tree for each column 
        } 


        **for (int y = 0; y <= numberColumns; y++) 
        { 
         while (rdr.Read()) 
         { 
          string childData = rdr[y].ToString(); 
          treeView1.Nodes[y].Nodes.Add(childData); 
         } 

        }** 

        rdr.Close(); 

        //while (rdr.Read()) 
        //{ 
        //  string blah = rdr[2].ToString(); 
        //  treeView1.Nodes[0].Nodes.Add(blah); 
        // } 
        // rdr.Close(); 

        dbConn.Close(); 
       } 
      } 
      catch (OleDbException y) 
      { 
       Console.Error.WriteLine("Error: Failed to create a database connection. \n{0}", y.Message); 
      } 
+0

さてさて、私は、forループ/しばらくの周りに切り替えることで、この作業を取得するために管理しました。ありがとう!!! –

答えて

1

フリップループ:

while (rdr.Read()) 
{ 
    for (int y = 0; y <= numberColumns; y++)   
    { 
     string childData = rdr[y].ToString(); 
     treeView1.Nodes[y].Nodes.Add(childData); 
    } 
} 
1

あなたはその後、行、列をループする必要があります。

DbDataReaderは、結果セットの前方参照のみです。
リーダーを「巻き戻し」して行をもう一度見ることは不可能です。

現在のコードでは、最初の列の行をループした後、Read()は、それ以上行がないため、常にfalseを返します。

関連する問題