3

名前が示すように、データテーブルで行をグループ化しようとしています。さらに詳しく説明すると、このテーブルには 1 つのフィールド (列) を除いて同一の行があります。基本的に私がやろうとしているのは、同じ行のすべての異なるフィールドを配置し、他の行を削​​除しながらそれらを単一のフィールドに配置することです。

ここに私が現在使用している構文があります

   Dim i As Integer
    Dim j As Integer
    For i = 0 To (ds.Tables(0).Rows.Count() - 1) Step 1
        If (i < ds.Tables(0).Rows.Count()) Then
            roleHtml = "<table><tr><td>" + ds.Tables(0).Rows(i).Item("roleName") + "</td></tr>"
            For j = (ds.Tables(0).Rows.Count() - 1) To 0 Step -1
                If (ds.Tables(0).Rows(i).Item("UserName") = ds.Tables(0).Rows(j).Item("UserName")) And (ds.Tables(0).Rows(i).Item("roleName") IsNot ds.Tables(0).Rows(j).Item("roleName")) Then
                    roleHtml += "<tr><td>" + ds.Tables(0).Rows(j).Item("roleName") + "</td></tr>"
                    ds.Tables(0).Rows.Remove(ds.Tables(0).Rows(j))
                    i -= 1
                End If
            Next j
            roleHtml += "</table>"
            ds.Tables(0).Rows(i).Item("roleName") = roleHtml
        End If
    Next i

問題は、行を削除するときにインデックスが変更され、基本的にフィールドがそれとは関係のない別の行にスローされることです。

4

5 に答える 5

0

ループ部分は被せた感じです。

しかし、ループ中に項目を選択的に (またはすべて) 削除することは、下から上(または最後の要素から最初の要素へ、またはどのように言いたいか) に作業することがトリックであることに気付いていない場合、厄介な速さになる可能性があります。 .

それが質問の削除部分に対する完全な答えです。

最後から最初に作業する場合、番号付きリストのアイテムを削除しても、既に処理したアイテムのインデックスにのみ影響します。

-T.

于 2010-08-27T13:44:04.430 に答える
0

最近、コントロール ブレークスタイルのレポート で同様のことをしなければなりませんでした。

項目テンプレートが単なるリテラル コントロールであるリピーター コントロールへのデータのバインドを終了しました。次に、OnItemDataBound イベントを処理し、「コントロール」(Web コントロールの意味ではなくコントロール ブレークの意味で) 列が一致する限り、残りの列の値をクラスに追加するだけのコードを漠然と似たコードにしました。 -level 変数を開き、e.Item.Visible を false に設定します。それらが一致しなくなったら、e.Item.Visible を true (デフォルト) のままにして、リテラル コントロールの Text プロパティを、作業中の行に必要な html に設定します。

もっと良い方法があると確信していますが、asp.net でコントロール ブレーク レポートに関する情報を見つけるのは簡単ではありませんcontrol

于 2008-12-12T15:44:12.843 に答える
0

これはかなり読みにくいですが、これは通常、少し再構築する準備ができていることを意味します。

あなたが達成したいことをもっと概説できますか?DataTable に何を残しますか?

データはソートされていますか、それともデータベースでそれを行うことができますか? 並べ替えられている場合は、ループを 1 回実行するだけで済みます。

私は次のことをします:

  • データテーブルをソートする
  • 結果の新しいデータテーブルを作成します
  • 順番にステップスルーし、最後のユーザー名とロールの現在のリストの変数を保持します。ユーザー名が前回と同じでない場合は、最後のユーザー名とロールの現在のリストを使用して、データ テーブルに新しい行を追加します。ユーザー名が同じ場合は、ロールのリストに追加します。最後に到達したら、最後の行を追加することを忘れないでください。

これにより、ステップ実行中のコレクションから行を削除するという問題が回避されます。

于 2008-12-12T16:08:35.120 に答える