none
DataGridView / ReadOnly / Editier-Modus RRS feed

  • Frage

  • Hallo zusammen,

      in einem DataGridView möchte ich, dass der Benutzer nichts verändern kann (ReadOnly auf "true", soweit klar), er soll aber die Zellen per F2 in den Editier-Modus bringen können, damit er den Zellinhalt (oder einen Teil davon) markieren und in die Zwischenablage kopieren kann.

      Wie kriege ich das hin?

    Gruß,

    Matthias

    Donnerstag, 13. Oktober 2011 09:36

Antworten

  • Hallo Matthias,

    Du könntest z.B. den Zellen-Editor mit Schreibschutz versehen, indem Du im DataGridView.EditingControlShowing-Handler die Eigenschaft ReadOnly auf true setzt. Dadurch kannst Du den Text selektieren, in die Zwischenablage kopieren, aber nicht bearbeiten:

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1 {
        public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
    
                // Benutzer darf keine Zeilen hinzufügen oder löschen
                dataGridView1.AllowUserToAddRows = false;
                dataGridView1.AllowUserToDeleteRows = false;
    
                // Im Handler vom EditingControlShowing wird
                // die Bearbeitung deaktiviert
                dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
                TextBoxBase tb = e.Control as TextBoxBase;
    
                if (tb != null) 
                    tb.ReadOnly = true;
            }
    
            private void Form1_Load(object sender, EventArgs e) {
                List<Person> personList = new List<Person> { 
                    new Person { FirstName="Jo", LastName="Metzinger"}, 
                    new Person { FirstName="Tina", LastName="Behrens"}
                };
    
                dataGridView1.DataSource = personList;
            }
        }
    
        class Person {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    }
    
    

     

    Gruß
    Marcel

    Donnerstag, 13. Oktober 2011 10:01
    Moderator

Alle Antworten

  • Hallo Matthias,

    Du könntest z.B. den Zellen-Editor mit Schreibschutz versehen, indem Du im DataGridView.EditingControlShowing-Handler die Eigenschaft ReadOnly auf true setzt. Dadurch kannst Du den Text selektieren, in die Zwischenablage kopieren, aber nicht bearbeiten:

    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1 {
        public partial class Form1 : Form {
            public Form1() {
                InitializeComponent();
    
                // Benutzer darf keine Zeilen hinzufügen oder löschen
                dataGridView1.AllowUserToAddRows = false;
                dataGridView1.AllowUserToDeleteRows = false;
    
                // Im Handler vom EditingControlShowing wird
                // die Bearbeitung deaktiviert
                dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;
            }
    
            void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
                TextBoxBase tb = e.Control as TextBoxBase;
    
                if (tb != null) 
                    tb.ReadOnly = true;
            }
    
            private void Form1_Load(object sender, EventArgs e) {
                List<Person> personList = new List<Person> { 
                    new Person { FirstName="Jo", LastName="Metzinger"}, 
                    new Person { FirstName="Tina", LastName="Behrens"}
                };
    
                dataGridView1.DataSource = personList;
            }
        }
    
        class Person {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    }
    
    

     

    Gruß
    Marcel

    Donnerstag, 13. Oktober 2011 10:01
    Moderator
  • Hallo Marcel,

      perfekt, genau so hatte ich das gedacht. Danke!!

    Gruß,

    Matthias

    Donnerstag, 13. Oktober 2011 11:05