我有一个简单的转发器,看起来像:
<asp:Repeater runat="server" ID="rptOptions" OnItemDataBound="rptOptions_ItemDataBound">
<HeaderTemplate>
<thead>
<tr>
<td class="GridHeader">Account</td>
<td class="GridHeader">Margin</td>
<td class="GridHeader">Symbol</td>
<td class="GridHeader">Usymbol</td>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tbody>
<tr runat="server" ID="trOption">
<td class="GridRow"><asp:Label runat="server" ID="lblOptionAccount"></asp:Label></td>
<td class="GridRow"><asp:Label runat="server" ID="lblOptionMargin"></asp:Label></td>
<td class="GridRow"><asp:Label runat="server" ID="lblOptionSymbol"></asp:Label></td>
<td class="GridRow"><asp:Label runat="server" ID="lblOptionUsymbol"></asp:Label></td>
</tr>
</tbody>
</ItemTemplate>
</asp:Repeater>
现在,在我的代码隐藏中,我有一个被触发的事件,它应该在数据库中添加/插入一行。发生这种情况后,我从数据库中重新获取新的选项列表,并将它们重新绑定到转发器。这发生在更新面板内,因此列表会立即为用户刷新。
protected void lbtnAddOptionSave_Click(object sender, EventArgs e)
{
SelectedOption = new Option()
{
Account = txtAddOptionAccountNumber.Text,
Margin = chkAddOptionMargin.Checked,
Symbol = txtAddOptionSymbol.Text,
Usymbol = txtAddOptionUsymbol.Text,
};
Presenter.OnAddOption(); // Insert new option into database
RefreshOptions(); // Re-get list of options, bind them to repeater
}
现在,我想要做的就是使用jQuery ScrollTo插件直接滚动到新添加的行。
在jQuery插件中调用ScrollTo()方法的最佳方法是什么,所以我滚动到刚刚添加的特定行?无论如何我可以在ItemTemplate中标记我的行,这样我就可以通过jQuery轻松选择要滚动的元素吗?
理想情况下,在RefreshOptions()之后,我想执行ScrollTo函数向下滚动到新行。
答案 0 :(得分:1)
如果您知道行的客户端ID(您可以获得),那么简单地调用它就相对轻松了
$(document).scrollTo("#<row-id-here>", 800);
答案 1 :(得分:0)
将对象添加到数据库时(或之后),获取新插入对象的id。修改转发器以包含带有Visible="false"
的Label,以便它不会呈现给客户端。挂钩ItemDataBound
事件并根据您抓取的ID检查每个标签。当您找到匹配的行时,您可以获取该行的ID,然后您就可以使用滚动参数。
注意:其他数据绑定控件具有DataKey属性,该属性可用于对象的id并使其更简单。目前还不确定你是否与Repeater绑定,但GridView或ListView值得研究。