Fragensteller
wie kann ich bei nem Datagridview selecteed cells sichern?

Frage
Alle Antworten
-
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 -
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?
-
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