我正在使用objectdatasource在asp.net Web表单中处理主/详细gridview和detailsview.详细信息视图显示有关gridview中所选行的额外信息.当我对网格进行排序时,我希望在排序发生之前,当前选定的行在排序完成后保留在详细信息视图中.相反,每当我排序时,gridview都会自动选择新的第一行.
我发现了这个问题的部分解决方案.如果我设置WhateverGridview.SelectedIndex = -1 onsort并且值变为null.这使得它在排序后取消选择任何行.这会将详细信息视图留空.但是,我想要做的是保持选定的行不会使它无效.
那么,是否有人有一个很好的方法来保留所选值或阻止在排序事件触发后显示详细信息视图.
我试图从后面的代码有条件地隐藏DetailsView行.我希望能够根据某些条件调用SomeMethod并让它隐藏第12行.有谁知道我怎么能完成这个?
我已经使用调试器确认Row [12]是正确的行并且正在执行该方法.
protected void SomeMethod(object sender, EventArgs e)
{
DetailsView1.Rows[12].visible= false;
//Alternative methods I attempted that also did not work.
//DetailsViewRow row = DetailsView1.DataItem as DetailsViewRow;
//row[12].Visible = false;
//DetailsViewRow row = DetailsView1.Rows[12];
//row.visible = false;
}
Run Code Online (Sandbox Code Playgroud)
这是我的aspx.
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="ObjectDataSource2">
...
<asp:TemplateField HeaderText="Item"
SortExpression="Item">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Item") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Item") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Item") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
...
Run Code Online (Sandbox Code Playgroud)