Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 26.11.14 21:15 
Hallo,
ich habe eine Form, die über DataBinding gefüllt wird mit den Inhalten einer Modellklasse

ausblenden C#-Quelltext
1:
2:
3:
4:
    public partial class BehaelterEditUserControl : UserControl
    {

        Logics.Container localContainer = null;


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
        private void treeBehaelter_AfterSelect(object sender, TreeViewEventArgs e)
        {
            localContainer = ContainerMethods.GetContainerDetails(e.Node.Text);
            bsContainer.DataSource = localContainer;
        }


Nun möchte ich nach dem Speichern des Containers die Felder leeren, die zur Bearbeitung der Instanz zur Verfügung standen

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
        private void btnSpeichern_Click(object sender, EventArgs e)
        {
            try
            {
                if (localContainer == null)
                    MsgAusgabe.ShowError("Bitte wählen Sie einen Behälter zum Bearbeiten aus!");
                else if (ContainerMethods.CheckContainer(localContainer) == 1)
                    MsgAusgabe.ShowError("Dieser Behälter existiert bereits im System!");
                else if (!localContainer.IsValid)
                    MsgAusgabe.ShowError("Bitte erfassen Sie alle Felder!");
                else if ((localContainer != null) && (localContainer.IsValid))
                {
                    if (MsgAusgabe.AskQuestionYesNo("Sollen die vorgenommenen Änderungen gespeichert werden?") == DialogResult.Yes)
                    {
                        ContainerMethods.UpdateContainerDetails(localContainer);
                        MsgAusgabe.ShowInformation("Behälter erfolgreich gespeichert!");
                        MySqlHistorie.SetHistorie("Behälterverwaltung", localContainer.Label, "Geändert", employee);
                        LoadTreeView();
                        localContainer = null;
                        bsContainer.DataSource = localContainer;
                    }
                }
            }
            catch (Exception ex)
            {
                MySqlError.SetError(ex.Message, this.ToString(), Global.GetCurrentFunctionName());
                MsgAusgabe.ShowError(ex.Message);
            }
        }


Nun speichert und tut alles richtig, außer, dass wenn er die Felder leeren will über die leere Instanz ein Fehler kommt. (siehe Anlage)

Das UserControl habe ich auch als Anlage angefügt!

Kann mir hier jemanden einen Tipp geben?

Danke

Gruß
Daniel
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 26.11.14 21:47 
Eine DataSource auf null setzen ist auf jeden Fall keine gute Idee. Eine ~richtige~ Lösung kenne ich da auch nicht. Üblicherweise programmiere ich so das die Notwendigkeit eine DataSource auf null zu setzen nicht besteht. Hier z.B. frage ich mich warum du das UserControl noch anzeigst wenn du da gar kein Objekt mehr dran hängen hast. Es hilft ja nicht wenn die Leute weiter darin bearbeiten können und das landet dann im Nirvana. Wenn es doch nicht anders geht würde ich anstatt null denn Typ dranhängen den du da normalerweise benutzt. Hier vermutlich bsContainer.DataSource = typeof(Logics.Container);. Einfach weil es der Winforms Designer auch so macht damit man ohne vorhandene Instanz bestimmte Runtime Features zur Verfügung hat (wie zum Beispiel beim DataGridView das man schonmal die Spalten Information hat und die Spalten damit passend designen kann). Da das im Designer funktioniert wird es dann auch ohne Probleme zur Laufzeit funktionieren ;)
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 27.11.14 09:58 
Super.
Vielen Dank