【发布时间】:2014-10-27 06:14:03
【问题描述】:
如何在 ASP.NET gridview 中使用箭头键导航(向上或向下)同时突出显示当前行?
我可以使用 javascript 代码和 C# 代码使用向上和向下箭头键在行中移动。我还实现了一个开始请求和结束请求 JS 代码,用于在回发时保持滚动位置。
但是,我的问题是,滚动条不会向上或向下移动以自动显示突出显示的行。假设有 100 行,我选择第 15 行,但是网格高度好像只能显示 10 行,除非我们手动移动滚动条,否则它不会自动移动以显示通过箭头键选择的行。如何通过移动滚动条确保高亮行的同步或可见性?
我的 gridview 没有复选框。
请帮助我。这是我的代码:
<asp:GridView ID="gvCycles" runat="server" AutoGenerateColumns="False"
CssClass="grid"
AllowSorting="True"
ShowHeader="False"
ShowFooter="True"
OnSelectedIndexChanged="gvDeductionList_SelectedIndexChanged"
OnRowDataBound="gvDeductionList_RowDataBound" DataKeyNames="CycleID" onselectedindexchanging="gvCycles_SelectedIndexChanging"
>
<Columns>
<asp:BoundField DataField="CycleID" HeaderText="CycleID"
HtmlEncode="False"
SortExpression="CycleID">
<ItemStyle CssClass="GridViewHiddenColumn" />
</asp:BoundField>
我在回发时保持滚动位置的方法是:
<script language="javascript" type="text/javascript">
// This Script is used to maintain Grid Scroll on Partial Postback
var scrollTop;
//Register Begin Request and End Request
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
//Get The Div Scroll Position
function BeginRequestHandler(sender, args) {
var m = document.getElementById('divGrid');
scrollTop = m.scrollTop;
}
//Set The Div Scroll Position
function EndRequestHandler(sender, args) {
var m = document.getElementById('divGrid');
m.scrollTop = scrollTop;
}
</script>
另外,我在 keydown 和 keyup 中有这个
if (e.keyCode == '38') {
document.getElementById('<%= controlCapture.ClientID %>').value = false;
document.getElementById('<%= shiftCapture.ClientID %>').value = false;
// up arrow
__doPostBack(pageId, "up");
}
else if (e.keyCode == '40') {
document.getElementById('<%= controlCapture.ClientID %>').value = false;
document.getElementById('<%= shiftCapture.ClientID %>').value = false;
// down arrow
__doPostBack(pageId, "down");
问题:我不知道在哪里使用您在代码项目中提到的代码,这样,当我按下向下或向上箭头键时,它应该会自动移动滚动条。我没有分页。
页面加载代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //on initial load, default dates to current fbt year
{
dpDateFrom.DateValue = currentBT;
dpDateTo.DateValue = currentBTEnd;
Searchclick();
}
//cursor keys
else if (Request.Form["__EVENTARGUMENT"] == "up" || Request.Form["__EVENTARGUMENT"] == "down")
{
string eventArgument = Request.Form["__EVENTARGUMENT"];
int intPayCycleId = 0;
if (gvCycles.SelectedIndex >= 0 && gvCycles.SelectedIndex < gvCycles.Rows.Count)
{
if (eventArgument == "down")
{
if (gvCycles.SelectedIndex < gvCycles.Rows.Count-1)
{
gvCycles.SelectedIndex += 1;
}
}
else if (eventArgument == "up")
{
if (gvCycles.SelectedIndex > 0)
{
gvCycles.SelectedIndex -= 1;
}
}
hdnSelectedRow.Value = gvCycles.SelectedValue.ToString() + ","; //assign hidden value with selected row
SetRowsStyle(gvCycles);
if (int.TryParse(gvCycles.SelectedRow.Cells[0].Text, out intCycleId))
{
ShowDeductions(intCycleId, false);
}
}
}
}
【问题讨论】:
-
有什么想法或想法吗?有人可以帮我实现这个目标的javascript代码吗?我无法在整个互联网上获得任何资源。 23 次观看,还没有答案!
-
先分享你的代码。没有看到您的代码的人如何提供帮助?
-
Sam,再次感谢您,我不知道如何将它用于我的 gridview。看,我没有table,但是gridview。如果您阅读他提到的最后一行,作者只写了网格的左右箭头键。我只希望它在我传递我拥有的网格视图的名称时不起作用。我做得对吗?
-
好的,给我一些时间。我正在做一些工作,很快就会看看。干杯!
-
是的,我来自维多利亚。你从哪来?能否也分享一下Page_Load和keyup和keydown的JS代码?
标签: javascript c# jquery asp.net gridview