我有两个radiobuttons。 如果我点击第一个单选按钮,我希望列的顺序为:
如果我点击第二个单选按钮,我希望列的顺序为:
以下是我的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 :(得分: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 :(得分:1)
如果您只想单击单选按钮,请使用DataView.Sort方法,例如
dataView.Sort = "AssetName, Asset, Groups, TypeName, Iprisklevel";
然后在第二个单选按钮上单击“
”dataView.Sort = "Groups, AssetName, Asset, TypeName, Iprisklevel";
答案 2 :(得分: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);
}
}