Asp.net 如何处理可排序列表视图的SelectedIndex?
我有一个可排序的asp.net ListView 我有一个带有“选择”命令名的按钮。当我点击按钮时,相应的行被选中。如果单击排序标题,ListView将进行排序,但所选索引将保持不变。换句话说,如果单击第二行,则仍会选择排序第二行Asp.net 如何处理可排序列表视图的SelectedIndex?,asp.net,listview,sorting,Asp.net,Listview,Sorting,我有一个可排序的asp.net ListView 我有一个带有“选择”命令名的按钮。当我点击按钮时,相应的行被选中。如果单击排序标题,ListView将进行排序,但所选索引将保持不变。换句话说,如果单击第二行,则仍会选择排序第二行 有没有办法让ListView在排序后选择适当的行,这样,如果我单击某个项目,则仍然会选择排序相同的项目,但位置会根据排序的不同而有所不同?您必须以编程方式执行此操作-尽管解决方案有些麻烦。 第一步是在ListView中定义数据键和排序事件,如下所示 <asp
有没有办法让ListView在排序后选择适当的行,这样,如果我单击某个项目,则仍然会选择排序相同的项目,但位置会根据排序的不同而有所不同?您必须以编程方式执行此操作-尽管解决方案有些麻烦。 第一步是在ListView中定义数据键和排序事件,如下所示
<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="AddressId,AddressLine1"
onsorting="ListView1_Sorting" onsorted="ListView1_Sorted">
然后在后面的代码中,您必须处理事件。由于Items集合上的DataItems始终为null,并且DataIndex和DisplayIndex未设置为人们通常期望的值,因此我们必须使用datakey。在排序之前和之后,通过datakey集合存储选定项的datakey搜索,以与存储的datakey匹配。见下文
private DataKey dk;
protected void ListView1_Sorting(object sender, ListViewSortEventArgs e)
{
dk= (ListView1.SelectedIndex > 0) ? ListView1.DataKeys[ListView1.SelectedIndex] : null;
}
protected void ListView1_Sorted(object sender, EventArgs e)
{
if (dk == null) return;
int i;
ListView1.DataBind();
for (i = 0; i < ListView1.DataKeys.Count; i++)
if(AreEqual(ListView1.DataKeys[i].Values,dk.Values)) break;
if (i >= ListView1.DataKeys.Count) return;
ListView1.SelectedIndex =i;
}
private bool AreEqual(System.Collections.Specialized.IOrderedDictionary x, System.Collections.Specialized.IOrderedDictionary y)
{
for (int i = 0; i < x.Count; i++)
if (!x[i].Equals(y[i])) return false;
return true;
}
私有数据密钥dk;
受保护的无效ListView1_排序(对象发送方,ListViewSortEventArgs e)
{
dk=(ListView1.SelectedIndex>0)?ListView1.DataKeys[ListView1.SelectedIndex]:空;
}
受保护的无效列表视图1_排序(对象发送方、事件参数e)
{
如果(dk==null)返回;
int i;
ListView1.DataBind();
对于(i=0;i=ListView1.DataKeys.Count)返回;
ListView1.SelectedIndex=i;
}
私有布尔值相等(System.Collections.Specialized.IORDeredictionary x、System.Collections.Specialized.IORDeredictionary y)
{
对于(int i=0;i
谢谢,我开始走这条路,但希望控件中有更简单的构建。