2009-08-29 6 views
3

Ich verwende eine SPGridView, um einige Daten zu präsentieren, und habe die Filterfähigkeit aktiviert, die sehr gut funktioniert. Bis Sie ein bestimmtes Element in den zu filternden Daten wählen ...SPGridView, Daten und korrekte Methode, um sicherzustellen, dass Daten sicher sind

Das fragliche Datenelement hat einen Apostroph in der Zeichenkette (zB "dies ist die Zeichenkette von Richard"), der die Nachfilter-Anwendungsseite verursacht Last mit dem Fehler sterben:

Syntax error: Missing operand after 's' operator. 

Offensichtlich werden die Daten nicht automatisch sicher gemacht ...

die Daten werden in einer Datentabelle ist, und die SPGridView gespeist wird mit einem Objectdatatable verwenden.

Was ist die beste oder korrekte Methode, um sicherzustellen, dass die Daten sicher zu verwenden sind?

EDIT:

Nach viel Knirschen, ich habe eine Teilantwort gefunden, aber die Frage bleibt.

Die teilweise Antwort ist - Sie können die Daten für den Filter-Code sicher machen, aber Sie können es dann nicht korrekt in der Filter-Dropdown-GUI aussehen.

Hinzufügen von BoundField.HtmlEncode = true; zur SPGridView-Definition tut nichts.

Mit HttpUtility.HtmlEncode auf der Zeichenfolge tut nichts.

Manuelles Ersetzen aller Apostrophe in den Daten durch Ampersand # 39; Beim Einfügen in die DataTable kann der Filter ordnungsgemäß funktionieren, und die Daten werden in SPGridView angezeigt. Sie werden jedoch mit der HTML-Ersetzungszeichenfolge im Filterdropdown und nicht mit dem Apostroph angezeigt. Dies ist die Teillösung und ist nicht wirklich brauchbar, da sie eine schreckliche Filterkette erzeugt, die für den Endbenutzer sichtbar ist.

Ich bin immer noch auf der Suche nach einer vollständigen Lösung für dieses Problem, abgesehen von der Entfernung von beleidigenden Zeichen aus den Daten insgesamt, die nicht wirklich eine Lösung ist.

Grüße Richard

+0

Das ist ein Problem, das ich zu lesen, aber nirgends i'v jede bessere Lösung gesehen, als Sie gefunden haben. –

Antwort

3

Der Apostroph ist ein Sonderzeichen in den Filtern. Versuchen Sie, alle Instanzen des "'" (ein Apostroph) durch "''" (Doppelapostroph) zu ersetzen.

bearbeiten 09.01.2009

Ok, also es hat mich viel länger, als ich dachte, um tatsächlich diese Arbeit zu bekommen. Sie sollten müssen nur dieser Teil-Code in Ihre Web hinzufügen:

protected override void OnPreRender(EventArgs e) 
{ 
    if (!string.IsNullOrEmpty(gridDS.FilterExpression)) 
    { 
     _gridDS.FilterExpression = string.Format(
      _grid.FilteredDataSourcePropertyFormat, 
      _grid.FilterFieldValue.Replace("'", "''"), 
      _grid.FilterFieldName 
      ); 
    } 

    base.OnPreRender(e); 
} 

Oben Gitter ist Ihr SPGridView und gridDS ist vom Typ Object die meiner Meinung nach die einzige Art ist, dass Sie in der Lage sein wird, zu erhalten Filterung mit zu arbeiten ein SPGridView. Im Grunde denke ich, was passiert, ist, dass es einen Fehler im Microsoft-Code gibt, und es gibt Ihnen nicht wirklich eine Chance, den Filterwert zu validieren, bevor er in der Filterausdruck stecken bleibt. Mit Reflector konnte ich feststellen, dass das SPGridView nur den FilterExpression Ihrer Datenquelle setzt. Es tut dies mit Reflektion und dem Wert, den Sie für Ihr Gitter eingegeben haben.FilteredDataSourcePropertyName -Eigenschaft (ich sehe es immer in allen Beispielen auf "FilterExpression" festgelegt).

Referenz: http://www.reversealchemy.net/2009/05/24/building-a-spgridview-control-part-2-filtering/

+0

Was wird das mit der Anzeige der Informationen tun? Wird der doppelte Apostroph in SPGridView angezeigt, wenn er für den Endbenutzer gerendert wird? – Moo

+0

Ich habe meine Antwort bearbeitet, um vollständiger zu sein. –

+0

Sie, Herr, haben sich gerade einen Haufen Ruf verdient :) Oh, und mein ewiger Dank! Deine Lösung hat perfekt funktioniert. – Moo

Verwandte Themen