【问题标题】:GridView SortExpression issueGridView SortExpression 问题
【发布时间】:2013-08-05 12:11:51
【问题描述】:

我为网格视图中的列设置排序表达式。然后通过单击标题对列进行排序。到目前为止还不错。

但是,当我使用自动生成的选择按钮选择 gridView 行时:

<asp:GridView runat="server" ID="test" DataSourceID="sourceEmployees"
 AutoGenerateSelectButton="true">

如果我通过单击标题对列进行排序,则在选择一行后,GridView 仍然选择了旧行。最初选择的值丢失。如果我选择employeeID 值7,即使我按降序对列进行排序,第7 行仍保持选中状态,尽管我的employeeId 值7 已移动到不同的行。 [这里移到第 4 行,因为我共有 10 名员工]

我还需要执行什么来确保无论用户如何对 GridView 进行排序,最初选择的 employeeID 始终保持选中状态。

【问题讨论】:

  • 对不起。我的错..没有正确阅读它...已删除。
  • 您是使用自定义排序代码,还是仅使用 GridView 的默认排序功能?如果自定义,您能否在问题中显示该代码?
  • 我使用的是默认排序。允许排序=“真”。我只显示了我的 gridview 标记的相关部分

标签: asp.net gridview


【解决方案1】:

您需要处理后面代码中的所有内容(在索引更改时选择/取消选择行)。以下是基于您的设置的示例:

<asp:GridView DataKeyNames="EmpID"  
     SelectedRowStyle-BackColor="Yellow" ID="test" OnSelectedIndexChanged="test_SelectedIndexChanged" 
     runat="server" DataSourceID="sourceEmployees" AutoGenerateColumns="False"  
     AutoGenerateSelectButton="true" AllowSorting="true" 
     OnRowDataBound="test_RowDataBound" >

在上面,我添加了两个事件处理程序,一个用于OnRowDataBound,一个用于OnSelectedIndexChanged。我还添加了 DataKey 以跟踪所选员工 ID。

现在,在后面的代码中,这两个方法看起来像这样:

protected void test_SelectedIndexChanged(object sender, EventArgs e)
{
    ViewState["key"]= test.SelectedDataKey.Value;//Keep track of selected employee by ID            
}

protected void test_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var row = e.Row.DataItem as DataRowView;
        if (row.Row.Field<int>("EmpID") == (ViewState["key"] != null ? (int)ViewState["key"] : -1))
        {
            test.SelectedIndex = e.Row.RowIndex;
            //Setting the selected Index is not enough, you need to programmatically
            //set the color as well. Since I used Yellow on my markup, I use the same here
            e.Row.BackColor = System.Drawing.Color.Yellow;
        }

    }
}

【讨论】:

    【解决方案2】:

    我们需要使用GridView.EnablePersistedSelection 属性。 MSDN 声明

    如果此属性为 false 并选择了一行,则在显示新页面时会选择同一行,即使新页面中包含不同的数据也是如此。如果将此属性设置为 true,则当您显示其中包含不同数据的页面时,不会选择任何行。如果您随后返回选择了行的页面,则该行仍处于选中状态。

    将此属性设置为 true 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      相关资源
      最近更新 更多