我有GridView,我可以选择一行。然后我在网格上方有一个名为Edit的按钮,用户可以单击该按钮弹出一个窗口并编辑所选行。因此,该按钮将在
行后面有Javascript代码function editRecord()
{
var gridView = document.getElementById("<%= GridView.ClientID %>");
var id = // somehow get the id here ???
window.open("edit.aspx?id=" + id);
}
问题是如何在javascript中检索所选的记录ID?
答案 0 :(得分:9)
我根据JasonS的回应进行了研究。我所做的是在网格视图中创建一个隐藏字段,如下所示:
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:HiddenField ID="hdID" runat="server" Value='<%# Eval("JobID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="False">
<ItemTemplate>
<asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="Select" />
</ItemTemplate>
</asp:TemplateField>
然后在OnRowDataBind上设置代码来设置所选行
protected virtual void Grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Click to highlight row
Control lnkSelect = e.Row.FindControl("lnkSelect");
if (lnkSelect != null)
{
StringBuilder click = new StringBuilder();
click.AppendLine(m_View.Page.ClientScript.GetPostBackClientHyperlink(lnkSelect, String.Empty));
click.AppendLine(String.Format("onGridViewRowSelected('{0}')", e.Row.RowIndex));
e.Row.Attributes.Add("onclick", click.ToString());
}
}
}
然后在Javascript中我有这样的代码
<script type="text/javascript">
var selectedRowIndex = null;
function onGridViewRowSelected(rowIndex)
{
selectedRowIndex = rowIndex;
}
function editItem()
{
if (selectedRowIndex == null) return;
var gridView = document.getElementById('<%= GridView1.ClientID %>');
var cell = gridView.rows[parseInt(selectedRowIndex)+1].cells[0];
var hidID = cell.childNodes[0];
window.open('JobTypeEdit.aspx?id=' + hidID.value);
}
</script>
作品: - )
答案 1 :(得分:1)
1)更改您的javascript函数以使用参数
function editRecord(clientId)
{ ....
2)在editRecord按钮中输出调用...如果你想避免处理.net生成的id,只需使用简单的
<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />
答案 2 :(得分:1)
根据您对@ DaveK的回复的评论,在javascript中,您可以在用户选择它时将隐藏字段的ID设置为所选行的clientId。然后让您的editRecord函数使用隐藏表单字段上设置的值。
答案 3 :(得分:0)
可以通过设置预先填充了每行查询字符串的锚标签来完全避免使用javascript(虽然这会影响您的表格布局,但只需要一次点击而不是用户的2次)
在gridview模板中插入:
<asp:HyperLink runat="server" ID="editLink" Target="_blank"
NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'>
Edit..
</asp:HyperLink>