JavaScript에서 GridView Selected Row Datakey를 가져옵니다
-
04-07-2019 - |
문제
행을 선택할 수있는 GridView가 있습니다. 그런 다음 편집이라는 그리드 위에 버튼이있어 사용자가 클릭하여 창을 팝업하고 선택한 행을 편집 할 수 있습니다. 따라서 버튼에는 라인을 따라 JavaScript 코드가 있습니다.
function editRecord()
{
var gridView = document.getElementById("<%= GridView.ClientID %>");
var id = // somehow get the id here ???
window.open("edit.aspx?id=" + id);
}
문제는 JavaScript에서 선택한 레코드 ID를 검색하는 방법입니다.
해결책
나는 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) 매개 변수를 사용하려면 JavaScript 함수 변경
function editRecord(clientId)
{ ....
2) EditreCord 버튼에서 통화를 출력 ....net 생성 ID를 처리하지 않으려면 간단한 것을 사용하십시오.
<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />
@Davek의 응답에 대한 의견을 바탕으로 JavaScript에서 사용자가 선택할 때 숨겨진 필드의 ID를 선택한 행의 클라이언트로 설정할 수 있습니다. 그런 다음 eDitRecord 함수가 숨겨진 양식 필드에 설정된 값을 사용하도록하십시오.
각 행에 대한 쿼리 문자열로 사전 인구로 구성된 앵커 태그를 설정하여 JavaScript를 모두 피할 수 있습니다 (테이블 레이아웃에 영향을 미치더라도 사용자의 2 개가 아닌 한 번의 클릭 만 필요합니다).
GridView 템플릿에 삽입 :
<asp:HyperLink runat="server" ID="editLink" Target="_blank"
NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'>
Edit..
</asp:HyperLink>
제휴하지 않습니다 StackOverflow