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