2017-06-27 35 views
1

Webアプリケーションのユーザーのニーズに基づいてgridview列を動的に並べ替えようとしています。C#gridview列順序リセット

セイ例えば、デフォルトの表は...ユーザーが別のテーブルが表示されますが、それは順序CDE Fを持っている必要があります...列ABCDとYZA B.

WXY Z.

を開始

 <asp:GridView ID="lettertable" ClientIDMode="Static" runat="server" NullDisplayText="" AutoGenerateColumns="False"> 

      <Columns> 
       <asp:BoundField DataField="A" ReadOnly="false" ItemStyle-CssClass="tlet ssA" /> 
       <asp:BoundField DataField="B" ReadOnly="false" ItemStyle-CssClass="tlet ssB" /> 
       <asp:BoundField DataField="C" ReadOnly="false" ItemStyle-CssClass="tlet ssC" /> 
       <asp:BoundField DataField="D" ReadOnly="false" ItemStyle-CssClass="tlet ssD" /> 
       <asp:BoundField DataField="E" ReadOnly="false" ItemStyle-CssClass="tlet ssE" /> 
      ...etc 
      </Columns> 
     </asp:GridView> 

分離コードは次のようになり条件文(レコードの対同じセット対異なる間、nonstartup対起動を説明するために)のではなく拡張セットが含まれます。私が持っている現在の実装では、以下のとおりです。

  if (letchg == 0) 
      { 
       for (int i = 1; i < rep; i++) 
       { 
        var columnMove = grid.Columns[1]; 
        grid.Columns.RemoveAt(1); 
        grid.Columns.Insert((26), columnMove); 
       } 
      } 
      if (letchg == 2) 
      { 
       for (int i = 1; i < rep; i++) 
       { 
        var columnMove = grid.Columns[1]; 
        grid.Columns.RemoveAt(1); 
        grid.Columns.Insert((26), columnMove); 
       } 
      } 
      if (letchg == -2) 
      { 
       for (int i = 1; i < rep; i++) 
       { 
        var columnMove = grid.Columns[1]; 
        grid.Columns.RemoveAt(1); 
        grid.Columns.Insert((26), columnMove); 
       } 
      } 
     } 

ABCD ... WXYZから列をCDEF ... YZABに並べ替えると、起動とテーブルの切り替えが異なる条件があります。だから私がDEFG ... ZABCに行きたければ、それは相対的なので、私は1つの列だけを動かします。 BIG PROBLEMは、ユーザがリフレッシュボタンを押す(ポストバックを作成する)と、最後の操作を再送し、全体のオーダーを乱してしまうことです。

並べ替えを実行する前に、毎回ABCD ... WXYZにテーブルの列の順序をリセットすることはできますか?それは相対的な並べ替えではありませんか?それとももっと良い方法がありますか?

+0

なぜすべてのブロックがまったく同じ場合にも 'if'が必要ですか? – t3chb0t

答えて

0

動的に列を追加する必要があります。これをコードの下で使用します。

// grid Columns with respect to their data fields 
     Dictionary<string, DataControlField> gridColumns = new Dictionary<string, DataControlField>(); 
     for (int record = 0; record < lettertable.Columns.Count; record++) 
     { 
      var gridColumn = lettertable.Columns[record]; 
      if (gridColumn is BoundField) 
      { 
       var boundField = gridColumn as BoundField; 
       gridColumns.Add(boundField.DataField, gridColumn); 
      } 
     } 

     // columns new arrangement 
     string columnsOrder = "BAECD"; 
     for(int count= lettertable.Columns.Count-1; count>-1; count--) 
     { 
      // remove existig columns 
      lettertable.Columns.RemoveAt(count); 
     } 

     // add columsn 
     foreach (var columnOrder in columnsOrder) 
     { 
      lettertable.Columns.Add(gridColumns[columnOrder.ToString()]); 
     } 

     // Bind grid to show new columns 
     lettertable.DataBind(); 
+0

このコードは質問に答えるかもしれませんが、問題を解決する方法や理由について追加の[context](https://meta.stackexchange.com/q/114762)を提供すると、回答の長期的価値が向上します。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!あなたの答えを編集して説明を追加し、どんな制限や前提が適用されるかを示してください。この答えが他のものよりもなぜ適切であるかを言及することも傷つけません。 – ItamarG3

+0

あなたが上記で作成した新しいオーダーに関連してさらに並べ替えを行うでしょうか? – anesthetic

+0

並べ替えが必要ありません。新しい順序は、ユーザーインターフェイスに表示する新しい列の新しい順序です。 –