[ad_1]
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 内のすべてのテーブルが強制終了されました。, そして、なぜそこからデータが返されないのか疑問に思っていますか? データセット内のテーブルを破壊しました!
[ad_2]
コメント