문제

행을 선택할 수있는 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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top