Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中动态更改GridView列的顺序?_C#_.net_Asp.net - Fatal编程技术网

C# 如何在WPF中动态更改GridView列的顺序?

C# 如何在WPF中动态更改GridView列的顺序?,c#,.net,asp.net,C#,.net,Asp.net,我有两个单选按钮。 如果单击第一个单选按钮,我希望列的顺序为: 资产名称 资产 团体 字体名 知识产权风险水平 如果单击第二个单选按钮,我希望列的顺序为: 团体 资产名称 资产 字体名 知识产权风险水平 以下是我的XAML示例: <asp:GridView ID="dgAssets" runat="server" AutoGenerateColumns="False" AllowPaging="True" DataKeyNames="ID" AllowSor

我有两个单选按钮。 如果单击第一个单选按钮,我希望列的顺序为:

  • 资产名称
  • 资产
  • 团体
  • 字体名
  • 知识产权风险水平
如果单击第二个单选按钮,我希望列的顺序为:

  • 团体
  • 资产名称
  • 资产
  • 字体名
  • 知识产权风险水平
以下是我的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>

与其在设计模式下添加列,不如使用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);
}

如果您只想在单选按钮上进行排序,请单击,然后使用DataView

dataView.Sort = "AssetName, Asset, Groups, TypeName, Iprisklevel";
然后在第二个单选按钮上单击do

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

您必须动态添加列。下面是一些示例代码,其中添加了一个列,该列又被数据绑定。请注意,此模板是page类的一个子类

这种方法使用完全模板化的列。我相信您也可以使用绑定列,这可能会更简单一些。这一切都取决于您通常在网格视图中使用的内容

未测试但从工作代码中删除:

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);
    }
}

这是WPF还是asp.net?你的标题是WPF,但你的标签是asp.net。