none
DataGridView. Dem User ermöglichen eine Zeile zwischen zwei Zeilen einzufügen RRS feed

  • Frage

  • Hallo zusammen,

    ich arbeite an einem (vielleicht sogar trivialem) Problem.

    Ich möchte dem User ermöglichen über ein ContextMenuStrip eine Zeile zwischendirn im DataGridView einzufügen, (und dann zu ändern usw.). Mein DataGridView besteht nur aus zwei Spalten mit mehreren Zeilen.

    Ich habe es bisher nur erfolglos versucht und finde dazu leider keine Beispiele, die mir weiterhelfen.

    Hat jemand eine Idee?


    MfG und Danke schon mal im voraus.

    Viktor

    Mittwoch, 23. Mai 2018 09:42

Antworten

  • Hi Viktor,
    hier mal eine Demo, wie man das lösen kann. Mit dem Kontext-Menü wird vor der angeklickten Zeile eine neue Zeile eingefügt:

    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
      public partial class Form28 : Form
      {
        public Form28() => InitializeComponent();
    
        List<Form28Data> col = new List<Form28Data>();
        DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill };
        ContextMenuStrip contextMenu = new ContextMenuStrip();
        ToolStripMenuItem menuItem1 = new ToolStripMenuItem("Insert");
    
        private void Form28_Load(object sender, EventArgs e)
        {
          LoadData();
          dgv.DataSource = col;
          contextMenu.Items.Add(menuItem1);
          menuItem1.Click += menuItem1_Click;
          dgv.ContextMenuStrip = contextMenu;
          this.Controls.Add(dgv);
        }
    
        private void menuItem1_Click(object sender, EventArgs e)
        {
          Point pt1 = contextMenu.Bounds.Location;
          Point pt2=dgv.PointToClient(new Point(pt1.X, pt1.Y));
          int rowIndex = dgv.HitTest(pt2.X, pt2.Y).RowIndex;
          col.Insert(rowIndex, new Form28Data() { ID = 0, Info = $"<neu>" });
          dgv.DataSource = null;
          dgv.DataSource = col;
        }
    
        private void LoadData()
        {
          for (int i = 1; i < 99; i++)
            col.Add(new Form28Data() { ID = i, Info = $"Zeile {i}" });
        }
      }
      public class Form28Data
      {
        public int ID { get; set; }
        public string Info { get; set; }
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 23. Mai 2018 10:55