Frage

Ich erhalte „eine nicht behandelte Ausnahme des Typs‚System.StackOverflowException‘aufgetreten in System.Data.dll“ in meinem Dataview RowFilter Eigenschaft. Ich bin keinen Stack-Trace für das zu bekommen. So kann jemand mir helfen, dass auf. Hier finden Sie den Code, wo ich den Fehler in filterView bin immer.

                DataSet metalAttributeDS = LoadItemData();    //loads the static dataset
                DataTable metalDataTable = metalAttributeDS.Tables["FilterTable"];
                DataView metalfilterView = new DataView(metalDataTable);
                metalfilterView.ApplyDefaultSort = true;
                metalfilterView.RowFilter = queryBuilder +
                                            string.Format(
                                                " And AttributeName='Metal' and AttributeValueID in ({0})",
                                                string.Join(",", AttributeValueID.ToArray()));      //forms query condition dynamically.

                var res = from DataRowView rowView in metalfilterView select rowView["ItemID"].ToString();

                int countParam = 0;
                queryBuilder.AppendFormat(" and (");
                foreach (string id in res)
                {
                    countParam++;
                    queryBuilder.AppendFormat(" ItemID = '{0}'", id);
                    if (res.Count() > countParam)
                    {
                        queryBuilder.Append(" Or");
                    }
                }
                queryBuilder.Append(" )");
            }


            DataSet dataSet = LoadItemData();       //loads the static dataset
            DataTable dataTable = dataSet.Tables["FilterTable"];
            DataView filterView = new DataView(dataTable);
            filterView.ApplyDefaultSort = true;

                LogHelper.LogInfo(GetType(), "filterView.RowFilter");
                filterView.RowFilter = queryBuilder.ToString(); //      throws error

Danke, Mehul Makwana.

War es hilfreich?

Lösung 3

Ich habe dies mit Hilfe von Aristos festgelegt, aber ich habe wenig Änderungen an Aristos Snippet,

        foreach (string id in res)
                {
                    sbTheOr.Append(',');
                    Guid guid = new Guid(id);
                    sbTheOr.AppendFormat("Convert('{0}','System.Guid')",guid);
                }

                if (sbTheOr.Length > 0)
                {
                    // remove the first ,
                    sbTheOr.Remove(0, 1);
                    queryBuilder.AppendFormat(" and ItemID in ({0})",sbTheOr.ToString());
                }

Damit Stack-Überlauf Ausnahme wegen des sehr großen Ergebnisses gerade war. Und haben neue Sache accross dies festgestellt, dass wir RowFilter auf Guid Spalte Convert (Ausdruck, Typ) Syntax.

Danke Every1,

Mehul Makwana.

Andere Tipps

Vielleicht erstellen Sie eine riesige Linie mit oder, dass nicht umgehen kann ... Wenn Sie versuchen, das ...?

   StringBuilder sbTheOr = new StringBuilder();

    foreach (string id in res)
    {
        sbTheOr.Append(',');
        sbTheOr.Append(id);
    }


    if (sbTheOr.Length > 0)
    {
        // remove the first ,
        sbTheOr.Remove(0, 1);
        queryBuilder.AppendFormat(" and ItemID IN (" + sbTheOr.ToString() + ")");
    }

Können Sie nur überprüfen, was in ‚Querybuilder‘ gebaut wird? Ich denke, es gibt eine Möglichkeit, einige 'und' / 'Or' / öffnen oder schließen Klammer kommenden Extra am Ende.

Vereinfachte die Lösung

 StringBuilder sb =new StringBuilder();
 res.ToList().ForEach(x => sb.Append(", " + String.Format("Convert('{0}','System.Guid')", new Guid(x))));
 var output = sb.ToString().Trim(',');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top