it-swarm.com.de

Holen Sie sich GridView ausgewählte Zeile DataKey in Javascript

Ich habe GridView, mit dem ich eine Zeile auswählen kann. Ich habe dann über dem Raster eine Schaltfläche namens Bearbeiten, auf die der Benutzer klicken kann, um ein Fenster zu öffnen und die ausgewählte Zeile zu bearbeiten. Der Button wird also einen Javascript-Code haben, der den Zeilen nach folgt

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 ich die ausgewählte Datensatz-ID in Javascript abrufen kann.

9
Craig

Ich habe es basierend auf JasonS Antwort ausgearbeitet. Was ich getan habe, war ein verstecktes Feld in der Rasteransicht wie folgt zu 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 Sie Code, um die ausgewählte Zeile festzulegen

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 habe ich in Javascript Javascript so

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

9
Craig

1) Ändern Sie Ihre Javascript-Funktion, um einen Parameter zu verwenden

function editRecord(clientId)
{ ....

2) den Anruf in Ihrer editRecord-Schaltfläche ausgeben ... Wenn Sie vermeiden möchten, dass die von .net generierten IDs verwendet werden, verwenden Sie einfach eine einfache

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

Basierend auf Ihren Kommentaren zu @ DaveKs Antwort können Sie in Javascript die ID eines ausgeblendeten Felds auf die clientId der ausgewählten Zeile setzen, wenn der Benutzer es auswählt. Dann muss Ihre editRecord-Funktion den für das ausgeblendete Formularfeld gesetzten Wert verwenden.

1
JasonS

sie können Javascript generell vermeiden, indem Sie Ankertags festlegen, die mit der Abfragezeichenfolge für jede Zeile vorbelegt sind. Dies wirkt sich jedoch auf Ihr Tabellenlayout aus, es erfordert jedoch nur einen Klick anstelle von 2 des Benutzers.

einfügen in die Gridview-Vorlage:

<asp:HyperLink runat="server" ID="editLink" Target="_blank"
   NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'> 
     Edit..
</asp:HyperLink>
0
Brent