我有gridView table (using ASP.NET 3.5)
使用SqlDataSource
对象(来自我的SQL DB)填充,根据不同的授权规则(检索更多/更少的信息)从不同的SELECT命令动态更改
在GridView中,我设置了AllowSorting=true
,它运行正常。
我的问题是:
我希望disable Sorting
用于特定的列(例如照片),我理解它是通过设置来完成的:
myGrid.Columns[i].SortExpression = "";
只是,当我尝试访问此特定列时,我收到以下错误: `索引超出范围(列尚不存在!)。
我尝试连接以下事件:
它仍然无效。 如何访问特定列(一旦动态创建)并禁用它的排序?
以下是摘录:
ASPX Page:
<asp:GridView ID="gridNew" runat="server" AllowPaging="True"
AllowSorting="True" EnableModelValidation="True">
.CS Page:
protected void btnSend_Click(object sender, EventArgs e)
{
gridNew.DataSourceID = "Employees_DataSource";
switch (ddlSelection.SelectedValue)
{
case "Admin":
Employees_DataSource.SelectCommand = @"SELECT * FROM [Employees]";
gridNew.AutoGenerateDeleteButton = true;
gridNew.AutoGenerateEditButton = true;
gridNew.DataBind();
//gridNew.Columns[1].SortExpression = "";
// This is not working!! :(
break;
case "Manager": ...
default:
break;
}
谢谢! :) Mitsy。
答案 0 :(得分:2)
您可以通过禁用GridView DataBound事件上的单元格来禁用任何列(包括动态)上的排序。这将提供禁止列标题显示为按钮的所需结果。
protected void yourgrid_DataBound(object sender, EventArgs e)
{
yourgrid.HeaderRow.Cells[4].Enabled = false;
yourgrid.HeaderRow.Cells[5].Enabled = false;
}
答案 1 :(得分:1)
您应该处理GridView.Sorting
事件。 GridViewSortingEventArgs.SortExpression
是可写的。
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
// replace with your logic
String newOrder = "Column1";
e.SortExpression = newOrder;
e.SortDirection = "DESC";
}
修改:如果您只想禁用事件中特定列的排序,通常应该将GridViewColumn
的{{1}}设置为{{1 }}:
SortExpression
但是,您正在使用SqlDataSource(我不熟悉并亲自避免)和您动态创建了null
。 GridView的RowCollection也是空的吗?您是否最近在Page_Load中使用与之前相同的ID在每个回发上重新创建动态GridView?