【解決方法】データテーブルをデータセットに追加すると、データテーブルに行があっても常に空になります。


DB から取得した結果を含むデータセットがあり、それをベース データセットとして保持し、フィルタリングを 2 番目のデータセットで実行したいと考えています。

データテーブルにフィルタリングされたデータがあることを確認しますが、dataset.table.addを使用するとき

データセットは常に空です

以下のコード

protected void showMembers(Boolean filtered=false)
      {
          using (var cn = GetConnection())
          {
              cn.Open();
              string cmsGetProfiles = "SELECT * FROM [Vm_siteMembers] order by [Last Login Time] desc ";

              SqlDataAdapter EventsAdapter = new SqlDataAdapter(cmsGetProfiles, cn);
              BaseMembersListDS.Clear();// this DataSet defined as public static

              EventsAdapter.Fill(BaseMembersListDS);

              using (DataSet filteredMemberListDS = new DataSet())
              {
                  filteredMemberListDS.Merge(BaseMembersListDS.Tables[0]);
                  if (filtered)
                  {
                      DataTable dt = new DataTable(); dt.TableName = "filtered";

                      filteredMemberListDS.Clear();
                      foreach (var item in BaseMembersListDS.Tables[0].Columns)
                          dt.Columns.Add(item.ToString());

                      foreach (DataRow dr in BaseMembersListDS.Tables[0].AsEnumerable().Take(5))
                          dt.ImportRow(dr);

                      filteredMemberListDS.Tables.Add(dt);
                  }
                  MembersdataBind(filteredMemberListDS);//why filteredMemberListDS is empty
              }
          }
      }

      protected void MembersdataBind(DataSet filteredMemberList)
      {

          MemebersDdl.DataSource = filteredMemberList;
          MemebersDdl.DataBind();
      }

私が試したこと:

Columns headers on datatable match by doing this

foreach (var item in BaseMembersListDS.Tables[0].Columns)
                            dt.Columns.Add(item.ToString());

解決策 1

デバッガ! デバッガ内のコードを破棄し、DataSet を満たす行にブレークポイントを設定します。 コードを一度に 1 行ずつ実行し、変数の上にマウスを置くと、その内容が表示されます。 これは数秒で理解できたはずです。

あなたが見ている問題は明らかです。 取得したテーブルを新しい DataSet にマージします。 filteredMemberListDSそれからあなたは電話しました filteredMemberListDS.Clear() を実行すると、DataSet 内のすべてのテーブルが強制終了されました。, そして、なぜそこからデータが返されないのか疑問に思っていますか? データセット内のテーブルを破壊しました!

コメント

タイトルとURLをコピーしました