Laden...

Forenbeiträge von tristar Ingesamt 98 Beiträge

24.07.2023 - 11:51 Uhr

Danke, das war der entscheidende Hinweis!

Nun klappt es - danke!

21.07.2023 - 10:49 Uhr

So hatte ich es versucht bzw. verstehe auch deine Antwort:

ucDaten.cs

...
public event Action<Part> OnSelected;
...

private void btnTest_Click(object sender, EventArgs e)
        {

                    Part part = GetTestObject("0815");
                    if (part!= null)
                    {
                        OnSelected?.Invoke(part);
                    }
        }

FormStart.cs

ucDaten ucDaten = new ucDaten();

private void FormStart_Load(object sender, EventArgs e)
        {
            uc.OnPartSelected += OnPartSelected;
            ucDaten.OnSelected += UcDaten_OnSelected;
        }
        private void  UcDaten_OnSelected(Part obj)
        {
            // Aktion
        }

Ist es so falsch umgestezt?

Die Aktion mit dem Buttonclick wird aufgerufen, danach passiert aber nichts mehr. Der Debugger sprint auch nicht auf die FormStart.

20.07.2023 - 22:01 Uhr

Hallo mal wieder,

ich habe eine Form mit einem TabControl. Auf der ersten TabPage erscheint eine Übersicht (ucUebersicht - basierend auf einem UserControl). Bei Auswahl einer Zeile wird ein weiteres UserControl (ucDaten) als neue TabPage erstellt.

Form.cs

...
 ucUebersicht uc = new ucUebersicht(null);
 ...
 
 public FormStart()
        {
            InitializeComponent();
            
            AufrufUebersicht();
        }
         void AufrufUebersicht()
        {
            uc.Dock = DockStyle.Fill;
            this.tabPageUebersicht.Controls.Add(uc);
        }
        private void FormStart_Load(object sender, EventArgs e)
        {
            uc.OnSelected += OnSelected;
        }
        private void OnSelected(Part p)
        {
            AufrufUcPart(p);
        }
        void AufrufUcPart(Part p)
        {
            try
            {
                System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;
                Control c = new UserControls.ucDaten(p);
                if (p != null)
                    AddUserControls.AddControltoTabControl(tabControl, c, p.Nummer);               
            }
            finally
            { System.Windows.Forms.Cursor.Current = Cursors.Default; }
        }

ucUebersicht.cs

...
public event Action<Part> OnSelected;
...
 private void dgUebersicht_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    part = dgUebersicht.Rows[e.RowIndex].DataBoundItem as Part;
                    if (part!= null)
                    {
                        OnSelected?.Invoke(part);
                    }

                }
                finally { Cursor.Current = Cursors.Default; }
            }
        }

Das funktioniert soweit auch alles prima.

Nun würde ich aber gerne aus dem UserControl ucDaten heraus durch eine Aktion eine weitere TabPage ucDaten öffnen - auf meiner FormStart, im TabControl.

Mein Problem dabei ist, wie kann ich aus diesem UserControl (ucDaten) heraus meine Form bzw. TabControl ansprechen, damit dann eine weitere TabPage angehängt wird? Bisher wird ja zunächst die Form geladen und die Übersicht angedockt und das UserControl ist der Form "bekannt".

Ich hoffe, ihr versteht mein Problem? Und danke schon mal für die Hilfe!

26.11.2022 - 21:28 Uhr

@Th69 Danke, den Denkanstoß hab ich gebraucht 👍
Klappt nun prima!

25.11.2022 - 20:24 Uhr

Ich habe es nun soweit hin bekommen, dass es läuft.

Nun habe ich aber innerhalb der DataGridView zwei Buttons, um die Positionen hoch und runter verschieben zu können.


  void posIndexUp(DataGridView dg)
        {
            if (dg.SelectedCells.Count > 0)
            {
                int idx = dg.SelectedCells[0].OwningRow.Index;

                if (idx > 0)
                {
                    int col = dg.SelectedCells[0].OwningColumn.Index;

                    DataGridViewRowCollection rows = dg.Rows;
                    DataGridViewRow row = rows[idx];

                    rows.Remove(row);
                    rows.Insert(idx - 1, row);

                    dg.ClearSelection();
                    dg.Rows[idx - 1].Cells[col].Selected = true;
                }
            }
        }

Das geht nun aber nicht mehr, da es datengebunden ist.
Was hätte ich hierzu für Möglichkeiten, um die Positionen verschieben zu können?

21.11.2022 - 11:25 Uhr

Hier mal ein Versuche.


private BindingList<Positionen> blPositionen;

void SpaltenAnzeigen()
{
    
    blPositionen = new BindingList<Positionen>();      
    dataGridView1.DataSource = blPositionen;
}

void DatenUebernehmen
{
    blPositionen.Add(new Positionen()
            {
                ArtikelNummer = comboBox1.Text
            }); 
 }

Weshalb werden keine Daten im DataGridView angezeigt?
Muss ich dazu erneut die

BindingList

als

DataSource

setzen?
Oder ist die Art der Umsetzung falsch?

18.11.2022 - 21:48 Uhr

Danke euch für Eure Hilfe!
Soweit bin ich bisher gekommen und funktioniert soweit.


 private void OnTextChanged(object sender, EventArgs e)
        {
            string filter = cbx.Text;
            lbxItems.Visible = false;

            if (String.IsNullOrEmpty(filter)) return;

            List<Baugruppe> lst = FilterBaugruppe(filter);
            if (lst == null) return;

            lbxItems.Items.Clear();
            lbxItems.Items.AddRange(lst.ToArray());
            lbxItems.DisplayMember = "NummerBezeichnung";
            lbxItems.ValueMember = "Nummer";
            lbxItems.Visible = true;
        }

  void OnMouseDoubleClick(object sender, MouseEventArgs e)
        {
            Baugruppe bg = lbxItems.SelectedItem as Baugruppe;
            if (bg != null)
            {
                cbx.Text = bg.NummerBezeichnung;
                lbxItems.Visible = false;
            }
        }

Es gibt aber noch ein paar Kleinigkeiten, wo ich Hilfe bräuchte:


// Ist es möglich (wahrscheinlich schon - nur wie?), den Teil aus dem OnMouseDoubleClick mit dem Keys.Enter Event 
// als eine Methode zu schreiben, sonst habe ich doppelten Code.
 private void cbNummer_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                lbxItems.SelectedIndex = 0;
            }
            if (e.KeyCode == Keys.Enter)
            {
                Baugruppe bg = lbxItems.SelectedItem as Baugruppe;
               if (bg != null)
               {
                   cbx.Text = bg.NummerBezeichnung;
                   lbxItems.Visible = false;
               }
           }
        }

Und der zweite Punkt:
Ich würde gerne mit den Pfeil-Tasten innerhalb der ListBox navigieren.
Hab folgendes versucht, aber das SelectedItem ändert sich nicht. Weshalb?


private void lbxItems_KeyDown(object sender, KeyEventArgs e)
        {
            this.lbxItems.Focus();
            this.lbxItems.Select();

            if (e.KeyCode == Keys.Up)
            {
                if (lbxItems.SelectedIndex > 0)
                    this.lbxItems.SelectedIndex--;
                e.Handled = true;
            }
            else if (e.KeyCode == Keys.Down)
            {
                if (lbxItems.SelectedIndex < (lbxItems.Items.Count - 1))
                    this.lbxItems.SelectedIndex++;
                e.Handled = true;
            }
        }

18.11.2022 - 09:15 Uhr

Hallo zusammen,

ich bräuchte mal wieder einen Ratschlag von Euch.
Ich überarbeite derzeit eine Windows Forms u.a. mit einer Combobox.

Leider besteht das Problem, dass beim

Form_Load

es recht lange (~ 7-8 Sek.) dauert, bis die Daten an die

ComboBox

gebunden sind.
Es sind derzeit ~ 10.500 Datensätze, Tendenz steigend.

Ein Abruf der Daten über eine separate Form ist nicht möglich, da die Nutzer weiterhin mit einer ComboBox arbeiten möchten.
Selbst wenn ich beim Laden der Daten ein Limit setze, dann muss ich ja sobald der Nutzer einen Wert auswählen möchte, die restlichen Daten laden, was dann dauert.

Das Ändern der Reihenfolge,

.DisplayMember

,

ValueMember

und die

DataSource

, um ein Re-Loading der internal List zu vermeiden, hat keinen Effekt.

Was habe ich dann für Möglichkeiten?
Danke!

11.11.2022 - 09:07 Uhr

Hallo,
folgende Ausgangssituation:
Ich habe eine Übersicht und für diese verwende ich eine DataGridView und eine Textbox, um zu filtern.
Diese Übersicht soll in verschiedenen Bereichen angezeigt werden können und je nach Bereich ein anderes Event (beim Doppelclick auf die DataGridView) ausgeführt werden.
Event würde etwa bedeuten => Daten übergeben, neue TabPage mit Controls hinzufügen => weitere Events ...

Was ist der richtige Weg der Umsetzung dafür?
a) Erstelle ich die Übersicht als UserControl?
b) Erstelle ich eine Form und rufe je nach Bereich dann das entsprechende Event auf?
c) Das Event (Datenübergeben, AddTabPage ...) als eigenes UserControl?
d) eine andere Lösung

Ich hoffe, dass meine Frage verständlich ist?!

28.10.2022 - 09:33 Uhr

Tut mir leid, wenn ich es noch nicht ganz verstanden habe.
Ich kann zwar eine Zeile zur DataTable hinzufügen und auch als Objekt speichern. Das aber nur, wenn ich die Daten z.B. über eine Textbox an die DataGridView übergebe und einfüge.

Meine Frage ist, wie ich es hinzufügen kann, wenn die Daten direkt in die DataGridView eingetragen werden?
Wenn ich bereits eine Liste binde, dann kann der Nutzer direkt nichts ändern ...

27.10.2022 - 21:50 Uhr

Eine leere Liste (List<MeineKlasse>)?

27.10.2022 - 21:02 Uhr

Hallo,

ich habe ein ungebundenes DataGridView, dem ich lediglich Spalten hinzugefügt habe.
Der Nutzer kann dann seine Daten in die Zeilen eintragen.

Nun möchte ich die Daten als Objektliste einlesen, um anschließend speichern zu können.
Meine Frage ist, ob meine Lösung eine "gute" Lösung ist, oder ob es einen besseren Weg gibt?


List<MeineKlasse> list = new List<MeineKlasse>();
foreach (DataGridViewRow row in DataGridView1.Rows)
{
    MeineKlasse obj = new MeineKlasse();
    obj.id = (int)row.Cells["Id"].Value; 
    obj.Name = (string)row.Cells["Name"].Value;
    ...
    list.Add(obj);
}

20.10.2022 - 20:57 Uhr

Hier mein Versuch den Filter anzupassen. Zwar ohne Fehlermeldung, aber leider werden auch keine Ergebnisse angezeigt.


var filter = ansprechpartnerRepository.AlleAnsprechpartner().Where(c => c.Nachname != null).Select(c => c.Nachname.ToString().ToUpper().Contains(textBox1.Text.ToUpper())).ToList();

Ist mein Filterausdruck falsch?
ODer kann es daran liegen, dass andere Einträge im Datensatz null sind?

20.10.2022 - 11:14 Uhr

Entsprechend bleibt nur noch der Verdacht, dass dein Code nicht korrekt ist oder du ein Objekt mit Null als Nachname hast.

Ich habe Objekte, die Null als Nachnamen haben. Nur verstehe ich leider nicht, wie ich das nun lösen kann??

20.10.2022 - 09:46 Uhr

Entschuldige, aber irgendwie stehe ich auf dem Schlauch.
Habe die Abfrage nun wie folgt angepasst:


string q = @"SELECT
                            a.AnsprechpID AS AnsprechpartnerId,
                            a.Abteilung AS Abteilung,
                            a.Frau_Herr AS Anrede,
                            a.Email AS Email,
                            a.FaxNr AS FaxNr,
                            a.StandortId AS StandortId,
                            a.Nachname AS Nachname,
                            a.Vorname AS Vorname,
                            a.Titel AS Titel,
                            s.Firma_Standort AS Kunde
                            FROM tblansprechpartner a
                            LEFT JOIN tblstandort s ON a.StandortID = s.StandortID
                            WHERE (a.Nachname IS NOT NULL AND a.Nachname = @Nachname)";

Trotzdem erhalte ich weiterhin die Fehlermeldung??

19.10.2022 - 21:36 Uhr

Hallo,

ich rufe Daten aus der DB ab und binde diese an eine DataGridView. Klappt alles wunderbar.


public IEnumerable<Ansprechpartner> AlleAnsprechpartner()
        {
            using (IDbConnection db = new MySqlConnection(AppConnection.ConnectionString))
            {
                string q = @"SELECT
                            a.ID AS AnsprechpartnerId,
                            a.Abteilung AS Abteilung,
                            a.Email AS Email,
                            a.FaxNr AS FaxNr,
                            a.AdressId AS AdresseNr,
                            a.Nachname AS Nachname,
                            a.Vorname AS Vorname,
                            a.Titel AS Titel,
                            s.Firma AS Kunde
                            FROM tblansprechpartner a
                            LEFT JOIN tblstandort s ON a.AdressId = s.AdressId";

                return db.Query<Ansprechpartner>(q, commandType: CommandType.Text);
            }
        }

...
           var ansprechp = ansprechRepository.AlleAnsprechpartner().ToList();
            SortableBindingList<Ansprechpartner> sort = new SortableBindingList<Ansprechpartner>(ansprechp);
            dgUebersicht.DataSource = sort;


Nun möchte ich mit einer Textbox die Daten filtern:


var filteredList = ansprechRepository.AlleAnsprechpartner().Where(c => c.Nachname.ToString().Contains(textBox1.Text)).ToList();

Beim Filtern erhalte ich jedoch den Fehler:> Fehlermeldung:

System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."

Warum? Was ist falsch?
Kann es sein, weil ich als Tabelleneinträge bei Nachname auch null Werte habe?
Falls ja, wie kann ich das Problem lösen?

Ich habe es schon mit einer anderen Abfrage versucht, jedoch erhalte ich den selben Fehler:


string q = @"SELECT
                            a.AnsprechpID AS AnsprechpartnerId,
                            a.Abteilung AS Abteilung,
                            a.Frau_Herr AS Anrede,
                            a.Email AS Email,
                            a.FaxNr AS FaxNr,
                            a.StandortId AS StandortId,
                            a.Nachname AS Nachname,
                            a.Vorname AS Vorname,
                            a.Titel AS Titel,
                            s.Firma_Standort AS Kunde
                            FROM tblansprechpartner a
                            LEFT JOIN tblstandort s ON a.StandortID = s.StandortID
                            WHERE (a.Nachname IS NULL OR a.Nachname = @Nachname)";

06.10.2022 - 10:48 Uhr

Wenn der Code im Load auskommentiert ist, kann ich das UserControl problemlos hinzufügen.

Zugriff auf die AppConnection habe ich noch auf der Form, auf der das UserControl eingefügt werden soll.

06.10.2022 - 09:19 Uhr

Das mache ich doch, oder nicht?


public partial class userControlTest : UserControl
    {     
        public userControlTest()
        {
            InitializeComponent();
        }
       

        private void userControlTest_Load(object sender, EventArgs e)
        {
            IDatenRepository datenRepository new DatenRepository ();
            var kndDaten = datenRepository.AlleKunden().ToList();
            dataGridView1.DataSource = kndDaten;
        }

06.10.2022 - 08:54 Uhr

Leider hat sich das Problem doch noch nicht erledigt.

Ich habe das UserControl versucht auf der TabPage einzufügen. Da erhalte ich die dann die Fehlermeldungen - siehe Bild.
Der Fehler tritt ja nicht erst beim Start des Programmes auf, sondern bereits im Designer.

Folgendes habe ich gefunden, was ich denke, auf mein Problem zutrifft.

This problem can be caused if a class tries to get value of a key in web.config or app.config which is not present there.

e.g.
The class has a static variable

private static string ClientID = System.Configuration.ConfigurationSettings.AppSettings["GoogleCalendarApplicationClientID"].ToString();  
  

But the web.config doesn't contain the GoogleCalendarApplicationClientID key

The error will be thrown on any static function call or any class instance creation

Kann mir bitte jemand zu helfen, wie ich das Problem lösen kann?

04.10.2022 - 11:04 Uhr

Hab nochmals alles gelöscht und neu angelegt.
Nun klappt es. Danke für Eure Hilfe!

03.10.2022 - 21:23 Uhr

Zumindest konnte ich nun die Zeile finden, wo es Probleme gibt.
Leider weiß ich nicht, wie ich dies beheben kann.

In meinem UserControl greife ich auf ein Repository zu, das ich auch auf meiner Form verwende.

Kommentiere ich im UserControl folgenden Code aus, dann könnte ich das UserControl auch übernehmen:


void AufrufUebersicht()
        {
                  kundeRepository = new KundeRepository();
                  var kndDaten = kundeRepository.AlleKundendaten().ToList();
                  dataGridView1.DataSource = kndDaten;
}

D.h. die Zeile

var kndDaten = kundeRepository.AlleKundendaten().ToList();

macht Probleme.

Ich vernwende auf der Form zwar einen anderen Namen, kundenDaten anstatt kndDaten, aber das hilft nicht.

Kann mir bitte jemand helfen, wie ich das Problem lösen kann - danke!

01.10.2022 - 22:04 Uhr

Nun habe ich den Konstruktor des UserControl ohne Parameter erstellt.
Allerdings bekomme ich nun wieder bereits beim Hinzufügen auf die Form die folgende Fehlermeldung:

Anbei mal der Code:

System.TypeInitializationException: Der Typeninitalisierer für Projektname.AppConnction hat eine Ausnahme verursacht.
Syste.NullReferneceException: Der Objektverweis wurde nicht aus eine Objektinstanz festgelegt.

Das hier ist meine AppConnection:


 public static class AppConnection
    {
        public static string ConnectionString = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
}

UserControl:


public partial class userControlKunde : UserControl
    {
        IKundeRepository kundeRepository;

        public event DataGridViewCellEventHandler dg_CellDoubleClickEvent;

        public userControlKunde()
        {
            InitializeComponent();
            AufrufUebersicht();
        }
private void userControlKunde_Load(object sender, EventArgs e)
        {
            this.dataGridView1.CellDoubleClick += dg_CellDoubleClickEvent;
        }

 void AufrufUebersicht()
        {
                  kundeRepository = new KundeRepository();
                  var kndDaten = kundeRepository.AlleKundendaten().ToList();
                  dataGridView1.DataSource = kndDaten;
}


        private  void dg_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            dg_CellDoubleClickEvent?.Invoke(this.dataGridView1, e);
        }
    }

Form:


 public partial class Form_Kunde : Form
    {
       
        userControlKunde  uc = new userControlKunde ();

 
        public Form_Kunde())
        {
            InitializeComponent();
            AufrufKndUebersicht();
        }
        private void Form_Kunde_Load(object sender, EventArgs e)
        {
            uc.dg_CellDoubleClickEvent += new DataGridViewCellEventHandler(dataGridView1_CellDoubleClick);
        }

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            MessageBox.Show("TETS");
        }
...


01.10.2022 - 14:01 Uhr

Hallo,

ich habe ein UserControl erstellt und möchte dieses nun auf einer TabPage auf meiner Form einbinden.
Beim Hinzufügen über den Designer erhalte ich die Fehlermeldung

"Fehler beim Erstellen der Komponente userControl1
System.MissingMethodException: Der Konstruktor für den Typ userControl1 wurde nicht gefunden.
...

Woran liegt das? Bzw. wie kann ich das Problem beheben?

18.08.2022 - 14:57 Uhr

@Th69 So funktioniert beides! 🙂 Super, vielen Dank!

18.08.2022 - 09:41 Uhr

@Th69 An welcher Stelle meinst du ToList()?
Versucht habe ich dgArtikel.DataSource = artikelRepository.AlleArtikel().ToList(); Dies lässt sich allerdings nicht sotieren.

17.08.2022 - 20:21 Uhr

Hallo,
ich verwende für meine Abfragen Dapper.
z.B.:

 return db.Query<Lager>(q, commandType: CommandType.Text);

So erhalte ich als Rückgabewert IEnumerable<Lager>.

Wenn ich dies direkt an eine DataGridView binde, kann ich anschließend nicht sortieren. Daher habe ich mir eine Methode

ToDataTable

erstellt, womit ich
die DataGridView wieder sortieren kann, was auch prima klappt - eigentlich.

Solange ich IEnumerable<T> direkt an die DataGridView gebunden hatte, konnte ich z.B. per Doppelklick einen Datensatz wie folgt aufrufen:


Artikel a = new Artikel();
private void dgArtikel_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
            if (e.RowIndex != -1)
            {
                a = dgArtikel.Rows[e.RowIndex].DataBoundItem as Artikel;
                .....
             }
}

Seitdem ich die Daten nun per DataTable binde, funktioniert der obige Aufruf nicht mehr.
Was kann ich machen, dass der obige Aufruf trotz Verwendung einer DataTable funktioniert?

28.07.2022 - 11:51 Uhr

Oh, total übersehen, dass das ja immer ausgeführt wird! DANKE!

28.07.2022 - 11:44 Uhr

Hallo,

um ein neues Projekt ordentlich zu gestalten arbeite ich mich nun in DApper und Repository pattern ein.
Das Abrufen der Daten von der DB hat auch schon prima geklappt.
Nun hänge ich beim Update.


public interface IArtikelRepository
    {
        IEnumerable<Artikel> GetAllArtikel();
        Artikel GetById(int ArtikelIdent);
        void Insert(Artikel artikel);
        void UpdateArtikel(Artikel artikel);
        void Delete(int ArtikelIdent);
        void Save();
    }


public void UpdateArtikel(Artikel artikel)
        {
            using (IDbConnection db = new MySqlConnection(AppConnection.ConnectionString))
            {
                string q = @"UPDATE tblartikel SET Name = @Name WHERE Id = @Id";

                if (db.State == ConnectionState.Closed)
                    db.Open();
                db.ExecuteScalar<Artikel>(q, artikel);
             
            }
            throw new NotImplementedException();
        }

Und der Aufruf:


private void btnSpeichern_Click(object sender, EventArgs e)
        {
            artikelRepository.UpdateArtikel(a);
        }

Das Update wird zwar ausgeführt - also die Daten geändert - aber ich erhalte folgende Fehlermeldung:

Fehlermeldung:
System.NotImplementedException: "Die Methode oder der Vorgang ist nicht implementiert."

Was ist bzw. mache ich falsch?

27.07.2022 - 21:38 Uhr

Verstanden hab ich es ... hab aber eine schnelle Umsetzung gebraucht.
ABER ich arbeite mich jetzt in Repository Pattern ein.

26.07.2022 - 22:07 Uhr

Die statische Methode sieht nun so aus:


...
foreach (var item in lst)
                    {
                        var query = (from w in ctx.tblwareneingang
                                     where w.Id == item
                                     select new EinkaufDaten
                                     {
                                         Id = (int)w.bestellungen_ekId,
                                         LiefermengeAbgeschlossen = w.liefermengeAbgeschlossen,
                                         GelieferteMenge = (int)w.gelieferteMenge
                                     }).ToList();

                        lstDaten.AddRange(query);
                    }
                    return lstDaten;
...

Ich habe nun die Methode ColorGridView wie folgt umgebaut.


 void ColorGridView(DataGridView dg, List<string> lst)
        {

List<EinkaufDaten> lstDaten = DB.WE_Erfolgt(lst);
            foreach (var item in lstDaten)
            {
                foreach (DataGridViewRow row in dg.Rows)
                {
                    if (row.Cells["id"].Value.ToString() == item.IdEK.ToString())
                    {
                        if ((item.MengeAbgeschlossen == true) || (item.GelieferteMenge > 0))
                        { 
                            row.Cells["WEabgeschlossen"].Style.BackColor = System.Drawing.Color.Yellow; 
                        }
                        else
                        { row.Cells["WEabgeschlossen"].Style.BackColor = System.Drawing.Color.Red; }
                    }
                }

Hoffe, dass dies nun zumindest etwas besser ist?!
Abruf der Daten erfolgt nur einmalig über DB.WE_Erfolgt.

Momentan ist es auch deutlich schneller. Es wird auch farblich markiert, aber der else Zweig für dir rote Farbe wird nie
ausgeführt. Weshalb?

26.07.2022 - 11:00 Uhr

@Abt danke für deine Hilfe!
Ich werde mich mal an die Überarbeitung machen ...

  • Daten in einem Rutsch holen, nicht in n

Verstehe zwar was du damit meinst, aber wie soll es in einem Rutsch gehen? Die Daten schon beim ersten Abruf mit übergeben?
Sonst kann ich doch nur zeilenweise prüfen?!

25.07.2022 - 22:34 Uhr

Hallo zusammen, ich fülle eine DataGridview und möchte anschließend zwei Spalten farbig markieren.
Soweit klappt das auch alles. Der Aufruf zum Laden/Anzeigen der Daten geht richtig schnell, nur die farbliche Markierung dauert recht lange (~10sek).
Nun wäre meine Frage, ob ein anderer Aufbau zu einer Verbesserung der Performance führt? Bzw. was ich ändern kann/soll?


dataGridView1.DataSource = dt;

Die farbliche Markierung:


void ColorGridView()
        {
            bool weKomplettAbgeschlossen = false;
            bool weTeilweiseAbgeschlossen = false;
            bool reKomplettAbgeschlossen = false;
            bool reTeilweiseAbgeschlossen = false;

            for (int n = 0; n < dataGridView1.Rows.Count; n++)
            {
                // Prüfen ob WEbereits komplett abgeschlossen wurde.
                weKomplettAbgeschlossen = AufrufWE_Abgeschlossen_Pruefen(Convert.ToInt32(dataGridView1["id", n].Value));
                if (!weKomplettAbgeschlossen)
                {
                    weTeilweiseAbgeschlossen = AufrufWE_Erfolgt(Convert.ToInt32(dataGridView1["id", n].Value));
                    if (weTeilweiseAbgeschlossen)
                    {
                        dataGridView1["WEabgeschlossen", n].Style.BackColor = System.Drawing.Color.Yellow;
                    }
                    if (!weTeilweiseAbgeschlossen)
                    {
                        dataGridView1["WEabgeschlossen", n].Style.BackColor = System.Drawing.Color.Red;
                    }
                }
                if (weKomplettAbgeschlossen)
                {
                    dataGridView1["WEabgeschlossen", n].Style.BackColor = System.Drawing.Color.Green;
                }

                // Prüfen RE komplett abgeschlossen.
                reKomplettAbgeschlossen = AufrufRE_Abgeschlossen_Pruefen(Convert.ToInt32(dataGridView1["id", n].Value));
                if (!reKomplettAbgeschlossen)
                {
                    reTeilweiseAbgeschlossen = AufrufRE_Erfolgt(Convert.ToInt32(dataGridView1["id", n].Value));
                    if (reTeilweiseAbgeschlossen)
                    {
                        dataGridView1["REabgeschlossen", n].Style.BackColor = System.Drawing.Color.Yellow;
                    }
                    if (!reTeilweiseAbgeschlossen)
                    {
                        dataGridView1["REabgeschlossen", n].Style.BackColor = System.Drawing.Color.Red;
                    }
                }
                if (reKomplettAbgeschlossen)
                {
                    dataGridView1["REabgeschlossen", n].Style.BackColor = System.Drawing.Color.Green;
                }
            }
        }


Hier mal der Aufruf AufrufWE_Erfolgt:


 public static bool AufrufWE_Erfolgt(int id)
        {
            try
            {
                using (entity ctx = new entity())
                {
                    var query = (from w in ctx.tblwareneingang
                                 where w.bestellId == id
                                 select w).ToList();

                    if (query != null)
                    {
                        foreach (tblwareneingang we in query)
                        {
                            // falls abgeschlossen.
                            if (we.liefermengeAbgeschlossen)
                                return true;
                            else
                                // falls zumindest Eintrag existiert.
                                if (we.gelieferteMenge != 0)
                                    return true;
                        }
                        return false;
                    }
                    else
                        return false;
                }
            }
            catch (Exception ex)
            {
                return false; ;
            }
        }

27.03.2022 - 21:07 Uhr

Danke euch für die Hilfe!
Nun wird die Datei richtig abgerufen!

27.03.2022 - 09:35 Uhr

Guten Morgen,

ich versuche gerade verzweifelt den doppelten Backslash aus einem String zu entfernen:


string pfad = "D:\\Bild.png";
string ausgabe = pfad.Replace(@"\\", @"\");
return ausgabe;

Dennoch erhalte ich bei der Ausgabe "D:\Bild.png" anstatt "D:\Bild.png";

Was mache ich falsch??

19.12.2019 - 22:32 Uhr

Du solltest nicht zweimal casten (einmal is, und dann noch as):

Danke für den Hinweis

Evtl. liegt ja der StatusStrip auch in einem anderen Control (Panel?), aber wir kennen den Aufbau deiner Forms ja nicht.

Danke für den Tipp, genau das war das Problem!

19.12.2019 - 11:49 Uhr

Hab es nun wie folgt gelöst


 public static void StyleStatusStrip(Form f)
        {
            foreach (var control in f.Controls)
            {
                if (control is StatusStrip)
                {
                    StatusStrip sStrip = control as StatusStrip;
                    sStrip.BackColor = Color.WhiteSmoke;
                }
            }
        }

Führe ich solgenden Code allerdings beim Aufruf einer Form im Konstruktor aus, so wird der StatusStrip farblich nicht angepasst.
Beim Debuggen scheint es so, als ob der Strip nicht als Control der Form erkannt wird. Zumindest enthält die ControlCollection nicht den StatusStrip. Weshalb?

16.12.2019 - 21:35 Uhr

Ok, nochmal ...

Die fertige Applikation meine ich natürlich.
Der Nutzer öffnet das Programm, das Icon auf dem Desktop/Startmenü - erstmalig. Beim geöffneten Programm erscheint das Icon in der Taskleiste, welches dann an die Taskleiste angeheftet wird.

Veröffentlicht wird auf einen Netzwerkserver.
Per Gruppenrichtlinie wird eine Verknüpfung der .application auf die Desktops verteilt.
Die Datei wird bei der Veröffentlichung aktualisiert und zeigt auf die aktuelle Version. Wenn die Applikation un an die Taskleiste angeheftet wurde, dann wird die .application aber nicht mehr vom Server gestartet sondern beleibt bei der alten Version.
So muss dann nichts mehr extra angepasst werden. Also ohne MSI etc.

16.12.2019 - 21:05 Uhr

Ich habe das Problem, dass wenn Benutzer das erstellte Windows Forms Programm an die Taskleiste anheften und ich versioniere, dass dann nicht die neuste Version gestartet wird. Sondern immer die Version, die damals an die Taskleiste geheftet wurde.

Wir kann ich das lösen?

16.12.2019 - 21:03 Uhr

Ich habe die Form nun nochmals neu erstellt und nun klappt es.

13.12.2019 - 11:50 Uhr

Das ändert leider nichts.

Es ist zum Verrückt werden - keine Änderung wird angezeigt.
Alle anderen Forms sind kein Problem 8o

13.12.2019 - 11:00 Uhr

Hallo,

ich habe das Problem, dass bei einer Form Änderungen nicht angezeigt werden.
Ich kann zwar alles wunderbar designen, beim Starten wird davon jedoch nichts angezeigt.
Bei anderen Forms in diesem Projekt klappt es allerdings.

Hat jemand eine Idee, an was das liegen kann??

11.12.2019 - 21:32 Uhr

Hallo,

da ich an meinem Projekt das Layout ändern möchte, würde ich dazu gerne eine einfache Methode schreiben, die ich dann pro Form aufrufen kann.


public static void StyleReadOnlyTextBox(Form f)
        {
            foreach (var control in f.Controls)
            {
                TextBox textBoxReadOnly = control as TextBox;
                if (textBoxReadOnly.ReadOnly)
                {
                    textBoxReadOnly.BackColor = Color.AliceBlue;
                }
            }
        }

Beim Aufruf erhalte ich allerdings eine NullReferenceException. Weshalb??

10.12.2019 - 11:29 Uhr

Konnte es nun folgendermaßen anpassen:
Eigenschaft des TabControl auf OwnerDrawFix gestellt und dann das DrawItem Event verwendet.


 void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index == tabControl1.SelectedIndex)
            {
                e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text,
                    new Font(tabControl1.Font, FontStyle.Bold),
                    Brushes.Black,
                    new PointF(e.Bounds.X + 3, e.Bounds.Y + 3));
            }
            else
            {
                e.Graphics.DrawString(tabControl1.TabPages[e.Index].Text,
                    tabControl1.Font,
                    Brushes.Black,
                    new PointF(e.Bounds.X + 3, e.Bounds.Y + 3));
            }
        }

Nun hab ich allerdings noch das Problem, dass mein Text zu groß für das Register ist.
D.h. mache Buchstaben liegen gar nicht mehr auf der Registerkarte.

Was muss ich noch anpassen, damit der Text wieder auf die ganze Registerkarte kommt?

10.12.2019 - 10:52 Uhr

Hallo,

gibt es eine Möglichkeit, die Schriftgröße des Register einer TabPage zu ändern?
Wenn ich die bei den Eigenschaften der TabPage den Wert ändere bezieht es sich auf alle Controls.
Ich möchte allerdings nur gerne den Wert oben ändern.
Danke euch!

07.12.2019 - 20:59 Uhr

@Abt Danke für die Info!

07.12.2019 - 20:56 Uhr

Super, vielen Dank!
Genau was ich brauche!

06.12.2019 - 16:16 Uhr

Hallo,
ich möchte gerne ein neues Hauptmenü erstellen. Derzeit habe ich es über Buttons realisiert. Aber dafür geht mir irgendwann der Platz aus.
Daher würde ich es nun gerne als eine Art aufklappbare Lösung machen. Siehe Anhang.

Ist dies über TreeView möglich? Oder welches Control würdet ihr mir empfehlen?

Je nachdem welcher Nutzer welche Rechte hat, werden bisher die Buttons als Enabled = false dargestellt.
Ich glaube, dass TreeView keine entsprechende Eigenschaft hat, oder? Wie könnte ich dies dann entsprechend prüfen?

05.12.2019 - 21:05 Uhr

Danke für eure Hilfe.
Im Großen und Ganzen konnte ich mein Problem lösen, allerdings hab ich immer noch etwas Schwierigkeiten, wann wie was verwenden. Aber dazu danke für die hilfreichen Links!

04.12.2019 - 11:23 Uhr

Entschuldigung, das hab ich wirklich falsch geschrieben.

Ich meinte, mit welcher Version ist es möglich, einen Datenbankzugriff über "ADO.NET Entity Data Model " zu machen. Geht das bereits mit der Community Edition?

04.12.2019 - 10:18 Uhr

Hallo,
ich weiß nicht, ob es hier das richtige Forum ist,
aber könnte ihr mir vielleicht sagen, welche Visual Studio Version das Entity Framework enthält? Bereits die Community Edition?
In der Vergleichsliste der Versionen konnte ich nichts finden.

Danke!