2010-12-14 15 views
0

Ich habe eine Checkbox und ein Textfeld in einer GridView (für jede Zeile), und ich würde gerne in der Lage sein, einige Javascript zu schreiben, die die Textbox je nach Status des aktivieren und deaktivieren würde Kontrollkästchen (aktiviert oder deaktiviert). Ich denke, ich müsste JS den Zeilenindex geben. Ist das möglich?Deaktivieren/Aktivieren Textfeld in GridViewRow

Antwort

0

Vielen Dank für Ihre Antworten, ich habe von nur tun, ein Postback, um dieses Problem gearbeitet - nicht die beste Methode, aber aus Zeitgründen war es die logische Wahl

1

Wenn Sie bereit sind, verwenden jquery dann kann dies wie folgt sehr leicht erreicht werden:

$(document).ready(function() { 

    $('.grid tr').each(function() { 
     var r = $(this); 
     var c = r.find('.check'); 
     var t = r.find('.text'); 
     var f = function(c1, t1) { return function() { 
      if (c1.attr('checked')) { 
       t1.removeAttr('disabled'); 
      } 
      else { 
       t1.attr('disabled', 'disabled'); 
      } 
     }; 
     }; 
     c.click(f(c, t)); // attach click event handler 
     f(c, t); // set initial state 
    }); 
}); 

Above Skript geht davon aus, dass die gridview Tabelle mit grid CSS-Klasse eingerichtet und jedes Textfeld und Kontrollkästchen sind mit check und text css Klasse jeweils.

+1

Das einzige, was ich diese zu deaktivieren, ist hinzuzufügen haben Anzeigen der Statusvalidierung auf der asp.net-Seite. Da Sie den Status der Steuerelemente auf der Seite ändern, wird die Überprüfung des Ansichtsstatus Fehler auslösen. Solche Fehler sind intermittierend und schwer zu debuggen, aber sie sind da. Die Deaktivierung der Ansichtszustandsüberprüfung verhindert dies und gibt JavaScript die Möglichkeit, HTML-Steuerelemente auf der Clientseite zu ändern, während die Serverseite gezwungen wird, nicht viel Aufhebens darüber zu machen. – bleepzter

0


Ja, das ist absolut möglich.

Dazu müssen Sie die folgenden Schritte aus implementieren:

  1. Schreibe eine allgemeine JavaScript-Funktion übernehmen die Aktivierung/Deaktivierung eines Text-Box basiert auf dem Stand der Check-Box;
    Beispiel: -
    function ManageControlEnabling(sourceCheckBoxId, affectingControlId)
    {
    var sourceCheckBox = document.getElementById(sourceCheckBoxId);
    var affectingControl = document.getElementById(affectingControlId);
    var shouldEnable = false;

    if (sourceCheckBox && affectingControl)
    {
    shouldEnable = sourceCheckBox.checked;

    if(shouldEnable) 
        affectingControl.disabled = false; 
    else 
        affectingControl.disabled = true; 
    

    }
    }

  2. das Row-Data-Bound-Ereignis des Grid-View Griff. Implementieren Sie eine ähnliche Funktionalität in Ihrem .Net-Code, um die Aktivierung/Deaktivierung der Textbox (für jede Zeile) basierend auf dem Status der Checkbox zu ermöglichen. Fügen Sie auch die JavaScript-Funktion zum Kontrollkästchen hinzu.
    Beispiel: -

    CheckBox checkSource; 
    TextBox textAffecting; 
    
    
    checkSource = e.Row.FindControl("cbSource") as CheckBox; 
    textAffecting = e.Row.FindControl("tbAffecting") as TextBox; 
    
    
    if(checkSource != null) 
    { 
        textAffecting.Enabled = checkSource.Checked; 
    } 
    
    
    checkSource.Attributes.Add("onclick", "ManageControlEnabling('" + checkSource.ClientID + "', '" + textAffecting.ClientID + "', true);"); 
    

Bitte sehen, ob das hilft.

Danke.

+0

Vielen Dank für Ihre Hilfe :) leider funktioniert es nicht - der rowdatabound Teil funktioniert (es fügt die Attribute hinzu, und das Textfeld ist abhängig vom Checkbox-Status deaktiviert/aktiviert), aber es aktiviert nie das Textfeld, wenn ich das Kontrollkästchen anklicke - selbst wenn ich alle ifs raushole und es einfach die Textbox aktivieren lasse. – Chris