none
wie kann ich bei nem Datagridview selecteed cells sichern? RRS feed

  • Frage

  • Hallo, wie kann ich bei nem Datagridview selecteed cells sichern und später diese cellen wieder markieren?
    Montag, 12. September 2011 14:00

Alle Antworten

  • Hi 

    zB

    private DataGridViewCell _selectedCell;
    
    private void dataGridView1_CellClick(object sender,
        DataGridViewCellEventArgs e)
    {
    _selectedCell = (DataGridViewImageCell)
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    }
    

    Grüße

    Montag, 12. September 2011 16:53
  • Hallo B.,

    zum Beispiel:

    using System;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Windows.Forms;
    using System.Xml.Serialization;
    
    namespace WindDgvSelectionDemo
    {
        public partial class Form1 : Form
        {
            DataGridView dgv = new DataGridView();
            ContextMenuStrip contextMenüDgv;
            ToolStripMenuItem selektiereZellenSichernToolStripMenuItem;
            ToolStripMenuItem selektierteZellenLadenToolStripMenuItem;
    
            public Form1()
            {
                InitializeComponent();
                Controls.Add(dgv);
                Load += new EventHandler(Form1_Load);
            }
    
            void Form1_Load(object sender, EventArgs e)
            {
                KontextMenüErstellen();
                DataTable dt = new DataTable("Daten");
                dt.Columns.Add(new DataColumn("Name"));
                dt.Columns.Add(new DataColumn("Reich", typeof(bool)));
                dt.Columns.Add(new DataColumn("Neffen", typeof(int)));
                dt.Columns.Add(new DataColumn("Geburtsdatum", typeof(DateTime)));
                dt.Rows.Add("Dagobert Duck", true, 1, new DateTime(1962, 10, 11));
                dt.Rows.Add("Donald Duck", false, 3, new DateTime(1973, 8, 12));
                dt.Rows.Add("Gustav Gans", false, 0, new DateTime(1973, 6, 13));
                dt.Rows.Add("Trick Duck", false, 0, new DateTime(1985, 4, 14));
                dgv.DataSource = dt; dgv.Dock = DockStyle.Fill;
                dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
                dgv.Columns[3].DefaultCellStyle.Format = "dd.MMMM yyyy";
                dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dgv.ContextMenuStrip = contextMenüDgv;
            }
    
            private void SelektiereZellenSichernToolStripMenuItem_Click(object sender, EventArgs e)
            {
                DataGridViewRow[] rows = new DataGridViewRow[dgv.SelectedRows.Count];
                dgv.SelectedRows.CopyTo(rows, 0); 
                DgvSerialisierung.Schreiben(rows.Select(r=>r.Index).ToArray());
            }
    
            private void SelektierteZellenLadenToolStripMenuItem_Click(object sender, EventArgs e)
            {
                int[] rowIndices = DgvSerialisierung.Einlesen();
                dgv.ClearSelection();
                foreach (var rowIndex in rowIndices)
                    dgv.Rows[rowIndex].Selected = true;
            }
    
            class DgvSerialisierung
            {
                private static string dateiPfad;
    
                static DgvSerialisierung()
                {
                    dateiPfad = Path.Combine(Application.CommonAppDataPath, "Zeilen.xml");
                }
    
                static public int[] Einlesen()
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(int[]));
                    TextReader tr = new StreamReader(dateiPfad);
                    int[] instanzen = (int[])serializer.Deserialize(tr); tr.Close();
                    return instanzen;
                }
    
                static public void Schreiben(int[] instanzen)
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(int[]));
                    TextWriter tr = new StreamWriter(dateiPfad);
                    serializer.Serialize(tr, instanzen); tr.Close();
                }
            }
    
            private void KontextMenüErstellen()
            {
                components = new Container();
                contextMenüDgv = new ContextMenuStrip(components);
                selektiereZellenSichernToolStripMenuItem = new ToolStripMenuItem();
                selektierteZellenLadenToolStripMenuItem = new ToolStripMenuItem();
                contextMenüDgv.SuspendLayout();
                SuspendLayout();
    
                // contextMenuStrip1
                contextMenüDgv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
                    selektiereZellenSichernToolStripMenuItem,
                    selektierteZellenLadenToolStripMenuItem});
                contextMenüDgv.Name = "contextMenuStrip1";
                contextMenüDgv.Size = new Size(200, 70);
    
                // selektiereZellenSichernToolStripMenuItem
                selektiereZellenSichernToolStripMenuItem.Name = "selektiereZellenSichernToolStripMenuItem";
                selektiereZellenSichernToolStripMenuItem.Size = new Size(200, 22);
                selektiereZellenSichernToolStripMenuItem.Text = "Selektiere Zeilen &sichern";
                selektiereZellenSichernToolStripMenuItem.Click += SelektiereZellenSichernToolStripMenuItem_Click;
    
                // selektierteZellenLadenToolStripMenuItem
                selektierteZellenLadenToolStripMenuItem.Name = "selektierteZellenLadenToolStripMenuItem";
                selektierteZellenLadenToolStripMenuItem.Size = new Size(200, 22);
                selektierteZellenLadenToolStripMenuItem.Text = "Selektierte Zeilen &laden";
                selektierteZellenLadenToolStripMenuItem.Click += SelektierteZellenLadenToolStripMenuItem_Click;
    
                // Form1
                AutoScaleDimensions = new SizeF(6F, 13F);
                AutoScaleMode = AutoScaleMode.Font;
                Name = "Form1"; ClientSize = new Size(350, 200);
                Text = "Selektierte Zellen sichern";
                contextMenüDgv.ResumeLayout(false);
                ResumeLayout();
            }
        }
    }
    
    


    ciao Frank
    Montag, 12. September 2011 19:46
  • danke schon mal,

     

    also ich merke mir jetzt die werte mit:

    rowindex = dgv.selectedrows[0].index

    und markiere diese wieder mit:

    dgv.Rows[rowIndex].Selected = true;

    klappt auch, jedoch wird die Zeile nur markiert, es ist aber nicht so, das auch zu dieser Zeile gesprungen wird, als würde sie mit der maus angeklickt. wie kann man das denn noch erreichen?

    Montag, 12. September 2011 22:12
  • Hallo B.,

    • ...  auch zu dieser Zeile gesprungen wird, als würde sie mit der maus angeklickt.

    Grundsätzlich nicht entscheidbar, weil ggf. mehrere Zeilen (über die STRG-Taste) selektiert sein können.
    Aber Du kannst zum Beispiel den ersten oder letzten Index nehmen:

            private void SelektierteZellenLadenToolStripMenuItem_Click(object sender, EventArgs e)
            {
                int[] rowIndices = DgvSerialisierung.Einlesen();
                if (rowIndices.Length != 0)
                {
                    CurrencyManager cm = BindingContext[dgv.DataSource, dgv.DataMember] as CurrencyManager;
                    cm.Position = rowIndices.Last();
                } 
                dgv.ClearSelection();
                foreach (var rowIndex in rowIndices) dgv.Rows[rowIndex].Selected = true;
            }
    

     


    ciao Frank
    Dienstag, 13. September 2011 05:24