2009-03-31 18 views
3

私は2つのラジオボタンを持っています。 私は、列の順序になりたい最初のラジオボタンをクリックした場合:私は2つ目のラジオをクリックするとWPFでGridView列の順序を動的に変更するにはどうすればよいですか?

  • ASSETNAME
  • 資産
  • グループ
  • 型名
  • Iprisklevel

をボタン列の順序を次のようにします。

ここでは10の
  • グループ
  • ASSETNAME
  • 資産
  • 型名
  • Iprisklevel

は私のXAMLのサンプルです:

<asp:GridView ID="dgAssets" runat="server" AutoGenerateColumns="False" AllowPaging="True" 
      DataKeyNames="ID" AllowSorting="True" OnPageIndexChanging="dgAssets_PageIndexChanging" 
      Width="100%" OnRowCommand="dgAssets_RowCommand" OnRowDataBound="dgAssets_RowDataBound" 
      OnSorting="dgAssets_Sorting"> 
      <Columns> 

       <asp:TemplateField Visible="False"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "ID")%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="ASSETNAME"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "ASSETNAME")%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="ASSET"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "ASSET")%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="GROUPS"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "GROUPS")%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="TYPENAME"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "TYPENAME")%> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField SortExpression="IPRISKLEVEL"> 
        <ItemTemplate> 
         <%# DataBinder.Eval(Container.DataItem, "IPRISKLEVEL")%> 
        </ItemTemplate> 
       </asp:TemplateField> 

      </Columns> 
     </asp:GridView> 
+0

はこのWPFまたはasp.netのですか?あなたのタイトルはWPFと言いますが、あなたはasp.netというタグを付けています。 – andleer

答えて

2

代わりのデザインモードで列を追加しますC#コードを使用して動的に追加することが考えられます。あなたが好きな方法で注文することができます。動的に列を追加するための

コード:

DataTable dt = yourDataTable; 
foreach (DataColumn col in dt.Columns) 
{ 
    BoundField bfield = new BoundField(); 
    bfield.DataField = col.ColumnName; 
    bfield.HeaderText = col.ColumnName; 
    dgAssets.Columns.Add(bfield); 
} 
1

あなただけのラジオボタンのクリックでソートしたい場合は、DataView.Sort方法は、例えば使用

dataView.Sort = "AssetName, Asset, Groups, TypeName, Iprisklevel"; 

そして、2番目のラジオボタンのクリックに

dataView.Sort = "Groups, AssetName, Asset, TypeName, Iprisklevel"; 
0

を行うあなたは動的に列を追加する必要があります。次に、データバインドされた列を追加するサンプルコードを示します。このテンプレートは、ページクラスのサブクラスであることに注意してください。

このアプローチでは、完全にテンプレート化された列が使用されます。私はあなたも少し簡単かもしれないバウンド列を使用することができると信じています。すべては、グリッドビューで通常使用するものによって異なります。

テストが、コード作業からカットされていない:

private void AddTemplates() 
{ 
    TemplateField templateField = new TemplateField(); 
    templateField.HeaderText = entity.ChangeHistoryColumn; 
    templateField.ItemTemplate = new GridViewColumnTemplate(); 
    GridViewMain.Columns.Add(templateField); 
} 

public class GridViewColumnTemplate : ITemplate 
{ 
    public GridViewColumnTemplate() { } 

    public void InstantiateIn(Control container) 
    { 
     Label label = new Label(); 
     label.DataBinding += delegate(object sender, EventArgs e) 
     { 
      GridViewRow row = (GridViewRow)label.NamingContainer; 

      int headerID = (int)DataBinder.Eval(row.DataItem, "HeaderID"); 
      ((Label)sender).Text = headerID.ToString(); 
     }; 

     container.Controls.Add(label); 
    } 
} 
関連する問題