InsertAt-Problem bei DataTable

Saber

Erfahrenes Mitglied
Hallo zusammen!

Ich habe folgendes Prob. Ich habe eine DataTable und darin befinden sich eine Menge Rows, die in einem DataGrid angezeigt werden. Nun möchte ich in meinem Programm die Möglichkeit implementieren neue Zeilen einzufügen (wie etwas in MS-Excel).
Das ganze soll so aussehen, dass ich mit der rechten Mouse-Taste auf eine Zeile klicke, dann "Zeile einfügen" auswähle im Kontextmenü auswähle und anschl. wird zwischen den anderen Zeilen eine neue, leere Zeile eingefügt.

Leider funktioniert das nicht. Ich hätte versucht eine neue Zeile mit der InsertAt()-Methode der DataTable an eine bestimmte Stelle einzufügen, aber die neue Zeile wird stets am Ende eingefügt. :(

Irgendeine Idee wie ich die neue Zeile dazwischen reinbekomme?

Code-Ausschnitt:
Code:
DataRow row = tbl.NewRow();
tbl.Rows.InsertAt(row, pos);

VIELEN DANK IM VORAUS! :)

MfG
Mike
 
Zuletzt bearbeitet:
Hallo Saber,
wenn ich verstanden habe was du möchtest dann geht dass meines Wissens nach nicht.
In der DataTable legst du ja die genau Struktur der Table fest z.B.:
name = new DataTable("blabla");
name.Columns.Add("Spaltenname",System.Type.GetType("System.String"));
.....
Mit InsertAt kannst du lediglich die vorher implementierte Struktur der Table abspeichern und nicht eine neue Zeile einfügen und damit die Struktur ändern.
row["Spaltenname"]="fklakdfjak";
name.Row.InsertAt(row,pos);

pos gibt lediglich die Position der gesamten Row in der Table an.

Vielleicht hilft dir das ja.......
 
Danke für Deine Antwort. Vermutlich geht das wirklich nicht. Irgendso etwas habe ich auf der Microsoft-Homepage in der MSDN darüber auch gefunden. Nur frage ich mich, welchen Sinn dann die InsertAt()-Methode macht.

Außerdem bedeuet für mich die Methodenbeschreibung aus dem Visual Studio.NET für InsertAt() mit dem Inhalt "Fügt eine neue Zeile an der angegebenen Position in die Auflistung ein", dass man in die DataTable an einer bestimmten Position eine DataRow einfügen kann. Na ja, vielleicht steh ich an dieser Stelle auch etwas auf dem Schlauch ... oder es ist ein Bug. ;)

Jedenfalls hab ich´s jetzt so gelöst. Mag etwas umständlich aussehen (ist es auch), aber naja ... Hauptsache es funktioniert. :D

Code:
			if (selRow != -1 && tbl.Rows.Count < 99)
			{
				// Leere Kopie der Table erstellen
				System.Data.DataTable tblCopy = tbl.Copy();
				tblCopy.Rows.Clear();

				if(grd.CurrentCell.ColumnNumber > 0)
				{
					// Alle Zeilen parsen
					for (int i = 0; i < tbl.Rows.Count; i++)
					{
						// Leeren Datensatz einfügen
						if (i == selRow)
						{
							System.Data.DataRow row = tblCopy.NewRow();
							tblCopy.Rows.Add(row);
							tblCopy.ImportRow(tbl.Rows[selRow]);
						}
							// Row kopieren
						else
						{
							tblCopy.ImportRow(tbl.Rows[i]);
						}

						// Änderungen übernehmen
						tblCopy.AcceptChanges();
					}

					// Geänderte Table rückkopieren
					tbl = tblCopy.Copy();

					// Änderungen übernehmen
					tbl.AcceptChanges();
					grd.Update();
				}
                      }
 
Zurück