Frage

Ich habe Gridview, die ich eine Zeile auswählen können. Ich habe dann eine Taste über dem Gitter genannt bearbeiten, die der Benutzer klicken kann, um ein Fenster Popup und die ausgewählte Zeile bearbeiten. So wird der Button Javascript haben Code dahinter entlang der Linien von

function editRecord()
{
  var gridView = document.getElementById("<%= GridView.ClientID %>");
  var id = // somehow get the id here ???
  window.open("edit.aspx?id=" + id);
}

Die Frage ist, wie kann ich die ausgewählte Datensätze ID in Javascript abrufen?

War es hilfreich?

Lösung

Ich arbeitete sie basierend auf Jasons Antwort. Was ich tat, war ein verstecktes Feld in der Grid-Ansicht wie folgt erstellen:

<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>

Dann auf der OnRowDataBind haben Code der ausgewählten Zeile setzen

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());
        }
    }            
}

Und dann in der Javascript Ich habe Code wie folgt

<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> 

Funktioniert ein Genuss: -)

Andere Tipps

1) ändern Sie Ihre JavaScript-Funktion einen Parameter zu verwenden,

function editRecord(clientId)
{ ....

2) Ausgabe der Anruf in Ihrem editRecord Taste ... wenn du mit dem .net vermeiden wollen den Umgang IDs generiert, verwenden Sie nur eine einfache

<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />

Auf der Grundlage von Ihren Kommentaren zu @ Davek Antwort, in javascript Sie die ID eines verborgenen Feldes an die clientId der ausgewählten Zeile setzen können, wenn der Benutzer es auswählt. Dann haben Sie Ihre editRecord Funktion den Wert auf dem versteckten Formularfeld gesetzt verwenden.

ein Javascript ganz vermeiden kann, indem Anker-Tags im Vorhinein gefüllt mit dem Abfrage-String für jede Zeile (obwohl dies Ihr Tabellenlayout bewirken, müssen sie nur ein Klick, anstatt 2 vom Benutzer)

Einsatz in der Gridview-Vorlage:

<asp:HyperLink runat="server" ID="editLink" Target="_blank"
   NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'> 
     Edit..
</asp:HyperLink>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top