C# 对动态创建的GridView上的特定列禁用SortExpression
我有一个C# 对动态创建的GridView上的特定列禁用SortExpression,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个gridView表(使用ASP.NET 3.5),它是使用SqlDataSource对象(从我的SQL DB)填充的,根据不同的授权规则(检索更多/更少的信息)从不同的SELECT命令中动态更改 在GridView中,我设置了AllowSorting=true,它工作得很好 我的问题是: 我想禁用特定列(如照片)的排序,我知道这是通过设置: myGrid.Columns[i].SortExpression = ""; 只是,当我试图访问此特定列时,我得到以下错误: `索引越界(列还不存
gridView表(使用ASP.NET 3.5)
,它是使用SqlDataSource
对象(从我的SQL DB)填充的,根据不同的授权规则(检索更多/更少的信息)从不同的SELECT命令中动态更改
在GridView中,我设置了AllowSorting=true
,它工作得很好
我的问题是:
我想禁用特定列(如照片)的排序
,我知道这是通过设置:
myGrid.Columns[i].SortExpression = "";
只是,当我试图访问此特定列时,我得到以下错误:
`索引越界(列还不存在!)。
我尝试连接到以下事件:
- 行数据绑定
- RowatBinding
ASPX页面:
<asp:GridView ID="gridNew" runat="server" AllowPaging="True"
AllowSorting="True" EnableModelValidation="True">
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.你应该处理这个事件。该文件是可写的
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
// replace with your logic
String newOrder = "Column1";
e.SortExpression = newOrder;
e.SortDirection = "DESC";
}
编辑:如果只想在事件中禁用特定列的排序,通常应将GridViewColumn
的SortExpression
设置为null
:
GridView1.Columns[0].SortExpression = null;
但是,您使用的是SqlDataSource(我不熟悉,个人也不喜欢),并且动态创建了
GridView
。GridView的RowCollection也是空的吗?您是否在每次回发时都使用与上次加载页面中相同的ID重新创建动态GridView?您可以通过禁用GridView数据绑定事件上的单元格来禁用任何列的排序(包括动态)。这将提供禁用列标题显示为按钮的预期结果
protected void yourgrid_DataBound(object sender, EventArgs e)
{
yourgrid.HeaderRow.Cells[4].Enabled = false;
yourgrid.HeaderRow.Cells[5].Enabled = false;
}
你好通过执行您的解决方案,并禁用排序逻辑,我实际上并没有禁用列标题作为按钮(“可排序”)显示,只是使其保持可单击状态,而不执行任何操作。你知道我该如何防止它以按钮的形式出现吗?(就像标签一样)。@user1268741:编辑了我的答案。您应该显示动态创建网格的方式和位置。列是使用SqlDataSource对象动态创建的。它工作得很好,我唯一的问题是排序。还有其他解决方案吗\谢谢你,马特,这正是我想要的答案。我从DataTable填充GridView,没有boundfields或templatecolumns。