Laden...

Forenbeiträge von serial Ingesamt 902 Beiträge

09.10.2008 - 10:13 Uhr

hmm, in welcher methode wird dieser code ausgeführt? in ner eigenen, oder in ner methode wie Page_Load oder in ner init methode ??

Er hat doch geschrieben, im onclick!

Also zu dem eigentlichen problem:

Genau das hatte ich auch schon, das eine gefüllte table als source angehängt wird, aber nicht angezeigt wird. Ich habe mir damit beholfen, das ich auf ObjectDataSource (SqlDataSource, je nachdem, wo deine daten herkommen) gesetzt habe, das hat dann wunderbar funktioniert!

mfg
serial

08.10.2008 - 18:46 Uhr

also mit einer endung *.csv funktioniert es (in der web.config eingestellt, und im IIS), aber nur auf einen pfad (ohne endnung) zu reagieren, habe ich noch nicht geschafft! Geht das überhaupt?

mfg
serial

08.10.2008 - 17:47 Uhr

hab ich gemacht!
Allerdings wird der handler nicht aufgerufen, und es wird auch kein fehler gewurfen!
Kann es am IIS liegen? Wie definiere ich da dieses mapping?

mfg
serial

08.10.2008 - 17:12 Uhr

Ich lese überall, das ich meine handler als DLL in den bin-Ordner legen soll, oder ins App_Code verzeichnis!

Gibt es keine möglichkeit, die handler im projekt, aber nicht im App_Code verzeichnis zu platzieren (ist eine Webanwendung --> Kein App_Code)

mfg
serial

08.10.2008 - 17:01 Uhr

Angeregt durch einen anderen Thread, benutze ich nun HTTPhandler.

besser gesagt Factories und Handler!
Nun möchte ich bei unserer Anwendung, das eine factory anspringt, wenn im Pfad dies steht /System/RPDownloads/, in der Webconfig habe ich dies gemacht:


<add verb="*" path="*/System/RPDownload/*" type="RegionalPortal.Modules.HTTPHandler.RP_DownloadHandlerFactory"/>

nun, weiss ich aber nciht genau, was ich im IIS eingeben muss, da er ja nur erweiterungen nimmt?!

Kann mir da jemand weiterhelfen?

mfg
serial

07.10.2008 - 16:05 Uhr

Eine konzeptionelle frage habe ich aber:

Sollte ich in dem Handler alles erledigen (also datei erzeugen und speichern) oder nur die vorher erstellte datei zum download "anbieten"
Wenn du alles im Handler machst, brauchst du die Datei nicht mehr unbedingt zu speichern, sondern kannst sie direkt nach der errzeugung in den ResponseStream schreiben. Damit sparst du dir FileSystem Operationen.

nur damit ich das richtig verstehe!
Ich bekomme meine Zeilen alle aus einer List<string>, ich kann dann theoretisch sowas wie das machen:


foreach(string zeile in Zeilen)
 Repsonse.Write(zeile);

??

mfg
serial

07.10.2008 - 15:37 Uhr

ja, habe mich jetzt auch für handler entschieden, supersache!

Eine konzeptionelle frage habe ich aber:

Sollte ich in dem Handler alles erledigen (also datei erzeugen und speichern) oder nur die vorher erstellte datei zum download "anbieten"

mfg serial

06.10.2008 - 23:07 Uhr

Also wenn ich mir diese Routine so anschaue, frage ich mich was Du da alles veranstalten willst?

Wenn Du "nur" eine geänderte Tabelle aus einer DataTable in die DB schreiben willst,
ist das eindeutig zu viel code.

Ein Fill und Merge vor dem Update ist sagen wir mal unverständlich.

Was willst du also wirklich machen, das der std. 5 Zeiler hier nicht funktionieren sollte?

ich garnicht...wie gesagt, der code ist nicht von mir! Undbevor ich groß etwas ändere, versuche ich eben den fehler erstmal ohne große umstellung zu veranstalten (ist großes projekt)!

Danke GMLOD, ich schau mir das morgen mal an...aber an die pessimistic c. habe ich auch schon gedacht!

mfg
serial

[EDIT] @ FZelle, allerdings interessiert mich, wie ich eben 2 DataSets (wovon eines veränderte daten enthält), sinnvoll zu dem bestehenden datenbestand bringen kann, ohne merge?!

06.10.2008 - 17:14 Uhr

verwendetes Datenbanksystem: <Sql 2005 EE>

Hallo, ich sitze gerade vor Code, der ein Update fahren soll, jedoch immer diese parallelitätsverletzung bringt.

Folgende Funktion:


public void SaveUsers(DataSet nDataset)
		{
			using (SqlConnection cn = OpenStat())
			{
				SqlDataAdapter userAdapter = UserAdapter(cn);
				SqlDataAdapter roleAdapter = RoleAdapter(cn);
				SqlDataAdapter senderAdapter = SenderAdapter(cn);


				SqlCommandBuilder cmdBuilder1 = new SqlCommandBuilder(userAdapter);

				SqlDataAdapter joinedAdapter = JoinedAdapter(cn);

				userAdapter.RowUpdated += new SqlRowUpdatedEventHandler(userAdapter_RowUpdated);


				DataSet oDataset = new DataSet();
				userAdapter.Fill(oDataset, "Users");
				senderAdapter.Fill(oDataset, "Sender");
				roleAdapter.Fill(oDataset, "Roles");
				joinedAdapter.Fill(oDataset, "JoinedUserList");

				BuildRelations(oDataset);

				//oDataset.Merge(nDataset);
                oDataset.Merge(nDataset);

                userAdapter.Update(nDataset.Tables["Users"].Select(null,null,DataViewRowState.ModifiedCurrent));


				oDataset.AcceptChanges();

				oDataset.Tables["JoinedUserList"].Clear();
				joinedAdapter.Fill(oDataset, "JoinedUserList");
			}
		}

aufgerufen wird sie so


db.SaveUsers(row.Table.DataSet);

wer kennt sich denn mit dieser thematik aus, habe schon gesucht, einniges probiert..aber nix funktioniert!

Vielleicht kann mir jemand einen tipp geben?

mfg
serial

06.10.2008 - 15:16 Uhr

ja, das habe ich auch herausgefunden!
Da ich das problem schnell lösen musste, habe ich Response.End() gegen ApplicationInstance.CompleteRequest() ersetzt, und es funktioniert!

mfg
serial

06.10.2008 - 11:04 Uhr

habe nun diese fehlermeldung etwas tiefer verschatelt gefunden, vielleicht hilft die weiter?

Der Thread wurde abgebrochen. INFO: System.Threading.ThreadAbortException: Der Thread wurde abgebrochen.
bei System.Threading.Thread.AbortInternal()
bei System.Threading.Thread.Abort(Object stateInfo)
bei System.Web.HttpResponse.End()

mfg serial

04.10.2008 - 21:03 Uhr

ok, schaus mir an!
Dennoch würde mich die lösung meines ursprünglichen problems interessieren!
Hatte das schonmal jemand?

Finde die Meldung ja ansich etwas komisch, und nixsagend...

mfg
serial

03.10.2008 - 23:52 Uhr

Hallo serial

Du solltest einen HttpHandler für eine solche Aufgabe benutzen:

Gruss Peter

das würde mich etwas näher interessieren, da du kein beispiel für einen download direkt gegeben hast! Wie sollte ich soetwas realisieren?

*habe mich noch nicht soviel mit der thematik auseinander gesetzt!

mfg
serial

03.10.2008 - 23:47 Uhr

niemand eine antwort??

mfg
serial

02.10.2008 - 22:44 Uhr

ja sorry!
Berufsblind

02.10.2008 - 22:32 Uhr

nein ist die debugversion!

Hat das etwas damit zu tun?
IN der r.version hab ich es nicht probiert!

mfg
serial

02.10.2008 - 22:15 Uhr

Hallo serial

Bitte mehr Infos zur Exception / Fehlermeldung.
Alles nach Response.End() wird nicht mehr durchgeführt!

Gruss Peter

das ist ja das lustige, es gibt keine weiteren infos, im kompletten exception-objekt steht überall (wirklich überall...bei data, stacktrace, message...) das gleiche!

mfg
serial

02.10.2008 - 18:55 Uhr

Hallo,
ich versuche gerade eine csv-datei zum client zu übertragen, bekomme aber immer einen fehler den ich nicht nachvollziehen kann:

folgende Funktion zum senden (in normaler .cs klasse)


public void ExportData(System.Collections.Generic.List<string> data, string filePath)
        {

            StreamWriter sw = new StreamWriter(filePath);
            foreach (string line in data)
                sw.WriteLine(line);

            sw.Close();
           

            FileInfo fi = new FileInfo(filePath);
               
            // Datei an Browser senden
            
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", fi.Name));
            HttpContext.Current.Response.AddHeader("Content-Length", fi.Length.ToString());
            HttpContext.Current.Response.ContentType = "text/cvs";
                HttpContext.Current.Response.WriteFile(fi.FullName);
            HttpContext.Current.Response.End();
            File.Delete(fi.FullName);
        }

hier der aufruf:


int quizID = Convert.ToInt32(e.CommandArgument);
                    QuizExportList liste = QuizRepository.GetExportResult(quizID, DB.ConnectionString2_0);
                    List<string> csv = liste.GenerateCSVResult();
                    IQuizExporter exporter = QuizExportFactory.GetExporter(ExporterTypes.CSVEXPORTER);
                    exporter.ExportData(csv, Server.MapPath("~/Datas.csv"));

folgenden fehler bekomme ich:

Data = Der Ausdruck konnte nicht ausgewertet werden, da der Code optimiert wurde oder oben in der Aufrufliste ein systemeigener Frame enthalten ist.

erstellt wird datei aufjedenfall auf dem server...

kann mir da jemand helfen??

mfg serial

01.10.2008 - 13:12 Uhr

Hallo, ich versuche eine Lose bindung über Factorys zu ermöglichen, bekomme allerdings einen Fehler: (bin gerade sicher nur blind)

folgender Code meldet fehler:


LastStepFactory lastStep = WizardStepFactoryBuilder.GetWizardFactory(QuizWizardTemplateTypes.LASTPAGEKONTAKT);

Diese Klasse gibt eine factory zurück:


public class WizardStepFactoryBuilder
    {
        public static WizardStepFactory GetWizardFactory(QuizWizardTemplateTypes templateType)
        {
            if (templateType == QuizWizardTemplateTypes.STARTPAGE)
                return new StartStepFactory();
            if (templateType == QuizWizardTemplateTypes.LASTPAGEKONTAKT || templateType == QuizWizardTemplateTypes.LASTPAGETHANKS)
                return new LastStepFactory();
            if (templateType == QuizWizardTemplateTypes.SUMMARYPAGE)
                return new SummaryStepFactory();

            return null;
        }
    }

und dies ist die abstracte Klasse:


public abstract class WizardStepFactory
    {
        public abstract IStepBase GetWizardStep(int templateKey);
    }




und hier die konkrete factory:


public class LastStepFactory:WizardStepFactory
    {
        public override IStepBase GetWizardStep(int templateKey)
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }

Fehler:
Fehler 32 Der Typ "RegionalPortal.Modules.Quiz.WizardStepFactory" kann nicht implizit in "RegionalPortal.Modules.Quiz.LastStepFactory" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.) D:\web\RegionalPortal\Modules\Quiz\FE_Quizwizard.ascx.cs 177 44 RegionalPortal

wieso funktioniert das nicht?

mfg
serial

30.09.2008 - 22:17 Uhr

sollte dazu jemand auch nur einen ansatz einer idee haben, wäre ich sehr dankbar!

mfg
serial

30.09.2008 - 22:16 Uhr

also zu deinem Menu_click wirst du schon gelangen, allerdings erst nach dem Load der Masterpage!
Um es zu schaffen, das nur der Content neu geladen wird, musst wohll Ajax oder eine sache mit ICallbackEventHandler (siehe dazu Doku) realisieren!

Ich bin mir nicht sicher, aber ich glaube zu denken, dass das menu auch eine SelectedStyle o.ä besitzt...

mfg
serial

30.09.2008 - 18:20 Uhr

Hallo, ich baue mir gerade eigene WizardSteps, und erbe daher von WizardStepbase!
Nun ist das anordnen der controls im codebehind ziemlich mühsam!

Gibt es eine möglichkeit, das deklarativ in der abgeleiteten klasse oder so zu machen?
Beim normalen wizard kann ich ja auch controls auf die steps ziehen... =/

mfg
serial

30.09.2008 - 17:03 Uhr

ja, und dieser ist leider immer null!

30.09.2008 - 16:15 Uhr

Hallo,

ich habe ein Gridview, welches durch ein ObjectDataSource daten bekommt.
Ich habe auch pro Datenzeile einen löschen button, welcher die DeleteMethod des ODS aufruft. Soweit sogut....nun brauche ich aber beim löschen, die ID (eigenschaft der items die an das grid gebunden werden) des gelöschten objekts...wie kann ich da heran kommen?

Der DeleteMethod gebe ich einen Parameter mit, dieser Funktioniert auch, aber im deleting event ist dieser immer null.

wie gehe ich hier richtig vor?

Hier das GridView


<asp:GridView ID="GridView1" runat="server" Width="825px" AutoGenerateColumns="false"
                            OnRowDeleting="rowDeleting" OnRowCommand="GridView1_RowCommand">
                            <Columns>
                                <asp:BoundField DataField="Title" HeaderText="Titel">
                                    <ItemStyle Width="200px" />
                                </asp:BoundField>
                                <asp:BoundField DataField="Text" HeaderText="Frage">
                                    <ItemStyle Width="200px" />
                                </asp:BoundField>
                                <asp:BoundField DataField="AnswerCount" HeaderText="Antworten">
                                    <ItemStyle Width="20px" />
                                </asp:BoundField>
                                <asp:CheckBoxField DataField="MultipleAnswers" HeaderText="multiple">
                                    <ItemStyle Width="20px" />
                                </asp:CheckBoxField>
                                <asp:CommandField ShowDeleteButton="True">
                                    <ItemStyle Width="100px" />
                                </asp:CommandField>
                                <asp:ButtonField CommandName="toUp" Text="Nach oben" />
                                <asp:ButtonField CommandName="toDown" Text="Nach unten" />
                                <asp:CommandField ShowEditButton=true />
                            </Columns>
                        </asp:GridView>

hier setzte ich datasource


protected void SetGridViewDataSource()
        {
            //Datasource erstellen, und auf Object festlegen
            _source = new ObjectDataSource();
            _source.TypeName = "RegionalPortal.Modules.Quiz.QuestionItemList";
            _source.SelectMethod = "GetAllQuestions";
            _source.DeleteMethod = "RemoveById";
            
            Parameter param = new Parameter("Id");
            _source.DeleteParameters.Add(param);

            _source.ObjectCreating += new ObjectDataSourceObjectEventHandler(_source_ObjectCreating);
            _source.Selecting += new ObjectDataSourceSelectingEventHandler(_source_Selecting);
            _source.Deleting+=new ObjectDataSourceMethodEventHandler(_source_Deleting);

            _source.ID = "dataSourceMain";
            this.Controls.Add(_source);
        }

Und damits vollständig ist, hier das Item, welches in einer Liste an das GridView übergeben wird:


[Serializable()]
    public class QuestionItem
    {
        int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        QuestionImageItem _questionImage;

        public QuestionImageItem QuestionImage
        {
            get { return _questionImage; }
            set { _questionImage = value; }
        }
        string _text;

        public string Text
        {
            get { return _text; }
            set { _text = value; }
        }
        AnswerItemList _answers;

        public AnswerItemList Answers
        {
            get { return _answers; }
            set { _answers = value; }
        }
        bool _multipleAnswers;

        public bool MultipleAnswers
        {
            get { return _multipleAnswers; }
            set { _multipleAnswers = value; }
        }

        string _title;

        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }

        public int AnswerCount
        {
            get { return _answers.Count; }
        }

        private int _sortOrder;

        public int SortOrder
        {
            get { return _sortOrder; }
            set { _sortOrder = value; }
        }


        public QuestionItem(QuestionImageItem questionImage, string text, AnswerItemList answers, bool multipleAnswers,string title,int sortOrder)
        {
            _questionImage = questionImage;
            _text = text;
            _answers = answers;
            _multipleAnswers = multipleAnswers;
            _title = title;
            _sortOrder = sortOrder;
        }

        public QuestionItem(int id, QuestionImageItem questionImage, string text, AnswerItemList answers, bool multipleAnswers,string title,int sortOrder)
            : this(questionImage, text, answers, multipleAnswers,title,sortOrder)
        {
            _id = id;
        }

    }

und wie kann ich nun, beim löschen auf die ID des zu löschenden/gelöschten objekts zugreifen?

mfg
serial

30.09.2008 - 10:20 Uhr

schau dir am besten mal die doku zu den besagten SqlComponenten an, da solltest du genügend wichtige informationen bekommen! =)

mfg
serial

29.09.2008 - 23:05 Uhr

dann gibt es in deinem dataset keine tabelle, und beim füllen ist schon etwas schiefgelaufen

29.09.2008 - 22:19 Uhr

mir ist nicht ganz klar, was darn kompliziert ist!
Die Daten stehen in dem Fenster, und wenn du auf den linkbutton clickst, löst du einen postback aus und speicherst die daten aus dem formular, auf welche du im codebehind direkt (sofern runat="server"), oder über Forms[] zugreifen kannst!

Wo liegt das spezielle problem?

Der Clientsriptmanager gibt dir zB die möglichkeit, beim laden der seite JavScript aus deiner Codebhindatei zu registrieren, Callbackevents mit Javascript zu ermöglichen etc...

mfg serial

29.09.2008 - 22:14 Uhr

ich benutze immer statt AttachedDB, DataBase = "myDatabase"

Was ist denn eigentlich der fehler, bzw die meldung?

29.09.2008 - 22:09 Uhr

vielleicht so:


DateTime test= (DateTime)ds.Table[0].Rows[ColNumber];

achso, wie du beschrieben hast, geht das auch!
Allerdings musst du natürlich auch auf die werte der spalte in den einzelnen zeilen (rows) zugreifen!

27.09.2008 - 00:29 Uhr

das müsste ähnlich mit win32 api funktionieren!
FindWindowEX ist zB ein Stichwort =)

26.09.2008 - 17:21 Uhr

danke noodles, das habe ich eben auch gerade festgestellt, habe es auf ID umgestellt =)

26.09.2008 - 12:10 Uhr

ich habe die update methode doch unten im code gesetzt!
Dieses wizard konnte ich nicht verwenden, da es eine ursprüngliche 1.1 anwendung ist, und er mir im wizard meine ganzen biz und dal nicht anzeigt!

25.09.2008 - 17:13 Uhr

Hallo Leute...

ich habe ein gridview an welches ich ein Objectdatasource hänge..anzeige klappt ganz gut!
Nun wollte ich eine zeile bearbeiten, aber er geht nicht ins den bearbeitenmodus, wieso?

Folgender Code:


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Width="377px" AutoGenerateEditButton="true"
            OnRowDeleting="GridView1_RowDeleting" OnRowCommand="GridView1_RowCommand" OnRowEditing="GridView1_RowEditing">
            <Columns>
                <asp:BoundField DataField="Text" HeaderText="Antworttext" />
                <asp:CheckBoxField DataField="IsCorrectAnswer" HeaderText="Richtige Antwort" />
                <asp:CommandField ShowDeleteButton="true" />
                <asp:CommandField ShowEditButton="true" />
            </Columns>
        </asp:GridView>

und datenbindung:


//Datasource setzen für GridView
            _source = new ObjectDataSource();
            _source.TypeName = "RegionalPortal.Modules.Quiz.AnswerItemList";
            _source.SelectMethod = "GetAllAnswers";
            _source.UpdateMethod = "AlterItem";
            _source.ObjectCreating+=new ObjectDataSourceObjectEventHandler(_source_ObjectCreating);
            GridView1.DataSource = _source;
            GridView1.DataBind();

liegt es daran, das ich das datasource nicht über die ID setze?
Wie könnte ich das Problem beheben...bzw bin ich nur blind?

mfg
serial

PS: habe es auch schon mit ItemTemplates -> EditItemtemplates probiert, geht auch nicht!

24.09.2008 - 18:32 Uhr

ja geht, danke =)

24.09.2008 - 17:54 Uhr

oh ja danke!
Hab ich schon lang nicht mehr gemacht!

Werds dann gleiuch mal testen...hoffe es klappt =)
danke

mfg
serial

24.09.2008 - 17:50 Uhr

sorry, die hab ich natürlich auch:


HelperFunctions.SwapObjects(_questions[0], _questions[1]);

_questions ist eine List<QuestionItem>

24.09.2008 - 17:45 Uhr

ja sorry, dachte den bekomm ich eigentlich alleine hin...anscheinend nicht =(


public static void SwapObjects(ref QuestionItem toSwapUp,ref QuestionItem toSwapDown)
        {
            QuestionItem temp = toSwapUp;
            toSwapUp = toSwapDown;
            toSwapDown = temp;

        }

hab ich echt das letzte mal in C++ gebraucht (vor ca 3 jahren...) =/

24.09.2008 - 17:38 Uhr

Hallo,

also ich habe gerade echt ein brett vorm kopf, ber ich komm nicht drauf, wie ich objekte meiner eigenen klasse in einer List<meinObjekt> tauschen kann?!

Mit dem "dreieckstausch"?
Funktioniert nicht....

Vielleicht kann jemand meine blockade lösen??

mfg
serial

22.09.2008 - 23:41 Uhr

ich möchte nix bemängeln, aber ich sehe in dem oberen beispiel keine wirkiche verwendung des delegaten!

Die ausgabe erfolgt doch seperat in der klasse duch Console.Write...müsste doch aber message(array_) o.ä lauten?!

mfg
serial

19.09.2008 - 15:39 Uhr

ja, allerdings wird diese Server_validate-Methode nicht aufgerufen, da ich sie an kein Control gebunden habe, und im Code aufrufen kommt mir irgendwie unsauber vor?! ...

mfg
serial

19.09.2008 - 15:23 Uhr

anscheinend kann ich diese controls nicht einfach an ein objectdatasource (daher kommen meine daten) hängen?

Habe zumindest beim überfliegenden lesen der howtos nix gefunden!

19.09.2008 - 15:09 Uhr

Hallo,

kennt jemand von euch ein paar gute, freie controls für asp.net 20.0?
Gerade benötige ich ein Chartingcontrol, welches ein halbes Pie darstellen kann!

Habe schon RadChart, allerdings geht das damit nicht.

mfg
serial

19.09.2008 - 14:12 Uhr

ich meine damit zb das:


private List<string> _data;

und diese sollte beim absenden eben gefüllt sein!
Wenn es nicht gefüllt ist, möchte ich aber in einem validationsummary eine meldung ausgeben!

19.09.2008 - 10:15 Uhr

Hallo,

mich würde mal interessieren, wie man am cleversten eine Instanzvariable einer Liste auf Inhalt prüfe, mit einem Validator (kann ich gleich validationgroups, summarys verwenden), oder mit einer eigenen validierungsfunktion?

Wenn zweites, habe ich da eine möglichkeit die fehlermeldung auch in ein summary zu schreiben?

Hintergrund:

Beim absenden des formulars darf eine Liste in meinem control nicht leer sein...

mfg
serial

19.09.2008 - 10:13 Uhr

ja das stimmt...und an das habe ich echt nicht gedacht...naja brett vorm kopf! =)

mfg
serial

18.09.2008 - 18:20 Uhr

hei ich habs gefunden, hab wirklich an einer stelle die _answers gecleared...ich depp!
Danke euch sehr =)

mfg
serial

18.09.2008 - 16:35 Uhr

aber _questions ist nicht null, nur die AnswerItemList eines jeden Questionitems in _questions! Aber ich schau mal nach, ob ich das irgendwo vielleicht wieder leere!

Für weitere tipps bin ich trotzdem dankbar..

mfg
serial

18.09.2008 - 14:23 Uhr

danke, schau ich mir mal an!
Ich glaube aber, für meine Zwecke reicht das erstmal! 😉

Hoffe aber das problem kann jemand lösen, bzw mir einen tipp geben?

18.09.2008 - 13:57 Uhr

also habe auch alle klassen mit [Serializable()] ausgestattet, funktioniert immernoch nicht! =/

was könnte ich noch machen?

18.09.2008 - 11:58 Uhr

lol, ok schauen wir mal:

AnswerItemList:


public class AnswerItemList:List<AnswerItem>
    {
        public event AnswerAddedEventHandler AnswerAdded;

        public AnswerItemList GetAllAnswers()
        {
            AnswerItemList result = new AnswerItemList();
            foreach (AnswerItem answer in this)
            {
                result.Add(answer);
            }
            return result;
        }

        public int GetAnswerCount()
        {
            return this.Count;
        }

        public new void Add(AnswerItem answer)
        {
            base.Add(answer);
            OnAnswerAdded(answer);
        }

        private void OnAnswerAdded(AnswerItem answer)
        {
            if (AnswerAdded != null)
                AnswerAdded(this, new AnswerAddedEventArgs(answer));
        }

        public AnswerItem GetById(int ID)
        {
            foreach (AnswerItem item in this)
            {
                if (item.Id == ID)
                    return item;
            }
            return null;
        }
    }

und mein AnswerItem


public class AnswerItem
    {
        string _text;
        int _id;
        bool _isCorrectAnswer;

        public bool IsCorrectAnswer
        {
            get { return _isCorrectAnswer; }
            set { _isCorrectAnswer = value; }
        }

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        public string Text
        {
            get { return _text; }
            set { _text = value; }
        }

        public AnswerItem(string text, bool isCorrectAnswer)
        {
            _text = text;
            _isCorrectAnswer = isCorrectAnswer;
        }

        public AnswerItem(int id, string text, bool isCorrectAnswer)
            : this(text, isCorrectAnswer)
        {
            _id = id;
        }
    }