2016-10-14 3 views
0

Ich habe Repater für die Datengruppe gruppiert. Alle Daten in derselben Tabelle und alle haben die Spalte QUESTION_GROUP. Ich übergebe den Gruppennamen aus dem Eltern-Repeater für den Kinder-Repeater in der Data-Bound des Eltern-Items. Aber ich kann es nicht als Datenquelle für Kinderrepetition einstellen. Wie kann ich mehrere Daten aus Data Table für Repeater DataSource filtern?Filtern von Datentabellen als Repeater DataSource (asp. Net)

protected void ParentRepeaterDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     Repeater rp = (Repeater)e.Item.FindControl("ChildRepeater");    
     rp.DataSource = FixedQuestions.Select("QUESTION_GROUP='" + DataBinder.Eval(e.Item.DataItem, "Q_Group").ToString() + "'"); 
     rp.DataBind(); 
    } 

Q_Gruppe kommt vom Eltern-Repeater. QUESTION_GROUP ist eine Spalte in fixedquestions (DataTable).

Ich frage, wie bekomme ich einen Teil der Datentabelle, die nach Spalte (für Repeater Data Source) gefiltert?

+0

Was meinen Sie, Sie können keine Datenquelle festlegen? Bitte erläutern Sie, was passiert, eine Ausnahme? Leerer Repeater? Was ist FixedQuestion? Es gibt nicht genug Informationen, um Ihnen zu helfen: http://stackoverflow.com/help/mcve – Esko

+0

@Esko Sorry. FixedQuestion ist die Datentabelle, in der alle Daten enthalten sind. Ich möchte einige Daten wie "DataTable.Select (Where question_group = Datenelement des übergeordneten Repeaters)" abrufen. Ich habe jetzt einen Fehler (Objektreferenz hat keine Instanz eines Objekts gesetzt). Sieht aus, als wäre meine Quelle nicht der richtige Typ für die Datenquelle des Repeaters. –

+0

Bearbeiten Sie all diese zusätzlichen Informationen zu Ihrer Frage. Welche Zeile löst die Ausnahme aus? Ist rp null? ist FixedQuestions null? Da es immer noch nicht genug Informationen gibt, um Ihnen zu helfen, können wir nicht wissen, was mit diesem Code falsch ist. – Esko

Antwort

0

Sie können Linq verwenden, um die Tabelle zu filtern, bevor Sie sie an den verschachtelten Repeater binden.

Das obige Snippet funktioniert so lange, wie nach dem Filtern noch Zeilen übrig sind Andernfalls erhalten Sie den Fehler "Die Quelle enthält keine DataRows". Das folgende Snippet prüft, ob vor dem Aufruf von CopyToDataTable() Zeilen vorhanden sind.

 DataTable dtFiltered = new DataTable(); 
     var dtFilteredTemp = FixedQuestions.AsEnumerable().Where(X => X.Field<string>("columnName") == "myValue"); 
     if (dtFilteredTemp.AsDataView().Count > 0) 
     { 
      dtFiltered = dtFilteredTemp.CopyToDataTable(); 
     } 
     rp.DataSource = dtFiltered; 
+0

Ich habe versucht, Ihre erste schnippelte und ich bekam "Source enthält keine DataRows" -Fehler. Also habe ich das zweite versucht, es gab keinen Fehler, aber es funktioniert nicht richtig. S Ro Debug den Code und sah dtFiltered hat 0 Zeile. Ich kann es nicht verstehen. :/ –

+0

Dann, was Sie gefiltert haben, ergab 0 Ergebnisse. Versuchen Sie, nach einem Wert zu filtern, der die Rückgabe von Zeilen gewährleistet. – VDWWD

+0

Ich hatte das bereits überprüft :(Ich denke, meine FixedQuestion-Tabelle könnte leer werden. Ich bekomme es mit Session (Und ich benutze Ihren Code wie -> (DataTable) Session ["FixedQuest"]). AsEnumerable(). Wo. .....) Ich denke, ich sollte meine Sitzung oder Update Panel oder etwas anderes überprüfen. Weil Ihr Code richtig und vernünftig aussieht. Danke für jetzt :) –

Verwandte Themen