none
Neueingefügte oder geänderten Datensatz wiederfinden ? RRS feed

  • Frage

  • Hallo,

    ich habe ein DataTable dt, DataView dv, DataRowView drv und einen Combobox cb.

    Dabei will ich irgend einen DS neueinfügen oder Ändern und nach diese Handlung den DS wiederfinden und in den cb selektieren das klappt irgendwie nicht, weil das ganze ist nach "dv.Sort = "JMT ASC";" sortiert und nicht nach "dv.Sort = "ID ASC";":

    dt hat mehrere Spalten unter anderem ID, JMT (JahrMonatTag)

    dv = dt.DefaultView; dv.Sort = "JMT ASC";

    Neueinfügen: drv = dv.AddNew();

    oder Ändern: drv = dv[cb.SelectedIndex]; drv.BeginEdit();

    SpaltenInhalte: drv["JMT"] = JJJJMMTT; i = drv["ID"];

    drv.EndEdit();

    cb.Item.Add(dv["JMT"]);

    DS-Wiederfinden: cb.SelectedIndex = dv.Find(i);

    wenn ich die Sortierung nach ID mache dann stimmt die originalSortierung nach JMT nicht

    Frage: Wie kann ich den DS wiederfinden, obwohl er nach JMT sortiert ist. Die DS'e sind nach dem ID eindeutig ?

    MFG

    Donnerstag, 20. August 2015 15:55

Antworten

  • Hi,
    hier mal eine Demo, wie das gemacht werden kann. Beim Hinzufügen wird die ID gemerkt. Die ID ist ValueMember der Combobox und die gemerkte ID setzt SelectedValue. Damit positioniert sich die Combobox auf den erfassten Eintrag.

    Form-CodeBehind:

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1CS
    {
      public partial class Form02 : Form
      {
        public Form02() { InitializeComponent(); }
    
        // Steuerelemente
        Form02Data Data = new Form02Data();
        ComboBox cb = new ComboBox() { Dock = DockStyle.Top, DisplayMember = "Text", ValueMember = "ID" };
        Button btnNew = new Button() { Dock = DockStyle.Top, Text = "Hinzufügen" };
        private void Form02_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { btnNew, cb });
          this.cb.DataSource = Data.View;
          this.btnNew.Click += Data.NewDataRow;
          Data.CB = this.cb;
        }
      }
    }
    

    Dazu der Code der Logik:

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1CS
    {
      class Form02Data
      {
        /// <summary>
        /// Zufallszahlengenerator initialisieren
        /// </summary>
        Random rnd = new Random();
    
        /// <summary>
        /// Konstruktor, mit dem die Daten geladen (generiert) werden
        /// </summary>
        public Form02Data()
        {
          // Spalten hinzufügen
          var dc = tab.Columns.Add("ID", typeof(int));
          dc.AutoIncrement = true;
          dc.AutoIncrementSeed = -1;
          dc.AutoIncrementStep = -1;
          tab.Columns.Add("Text", typeof(string));
          tab.Columns.Add("JMT", typeof(DateTime));
          // Daten erzeugen
          for (int i = 1; i < 10; i++)
          {
            tab.Rows.Add(i, string.Format("Zeile {0}", i), DateTime.Now.AddDays(rnd.NextDouble()));
          }
          index = tab.Rows.Count + 1;
          // Sicht bereitstellen
          View = tab.DefaultView;
          View.Sort = "JMT ASC";
        }
    
        /// <summary>
        /// Zaehler für Datensatz
        /// </summary>
        int index;
    
        /// <summary>
        /// Tabelle mit Daten
        /// </summary>
        DataTable tab = new DataTable();
    
        /// <summary>
        /// Sicht auf die Daten der DataTable
        /// </summary>
        internal DataView View { get; set; }
    
        /// <summary>
        /// Verweis auf die ComboBox
        /// </summary>
        internal ComboBox CB { get; set; }
    
        /// <summary>
        /// Ereignismethode für einen Button.Click zum Hinzufügen eines neuen Datensatzes
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        internal void NewDataRow(object sender, EventArgs e)
        {
          var drv = View.AddNew();
          drv.BeginEdit();
          drv[1]= string.Format("Neue Zeile {0}", index);
          drv[2] = DateTime.Now.AddDays(rnd.NextDouble());
          drv.EndEdit();
          CB.SelectedValue = drv[0];
          index++;
        }
      }
    }
    

     


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

    Freitag, 21. August 2015 04:37