Habe eine Form zum Anzeigen der Daten aus der Datenbank inkl. eines
BindingNavigators mit den Typischen Buttons MoveFirstItem, MoveLastItem,
MoveNextItem, MovePreviusItem, CountItem, PositionItem, AddItem und
DeleteItem. Die Problematik bezieht sich auf den Event des DeleteItems, den
ich folgendermaßen ausgebaut habe:
-------------Anfang Code-Beispiel:
private void bindingNavigatorDeleteItem_Click(object sender,
EventArgs e)
{
if(warrantyIDTextBox.Text.ToString() != "")
{
DialogResult result = MessageBox.Show("Are you sure to delete
the shown record?",
"Confirm File Delete", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
this.warranty_ExWarrantyTableAdapter.DeleteQuery(Convert.ToInt16(this.warrantyIDTextBox.Text));
}
}
}
-------------Ende Code-Beispiel
Wenn ich auf nein klicke, dann werden die Textfelder, die den Datensatz
anzeigten gelöscht und es wird der letzte Datensatz der angezeigt. Obwohl
hier kein delete oder clear funktion aufgerufen wird.
Hier noch einer hilfreicher Screenshot:
http://mitglied.lycos.de/SoheilAmjadi/deleteitem.JPG
Gruß
Soheil Amjadi
> Wenn ich auf nein klicke, dann werden die Textfelder, die den Datensatz
> anzeigten gelöscht und es wird der letzte Datensatz der angezeigt. Obwohl
> hier kein delete oder clear funktion aufgerufen wird.
Der BindingNavigator hat schon ohne, dass
Du irgendwelchen Code in die Handler
hineinschreibst Standard-Methoden, die
er im Ereignis-Fall ausführt.
Bei ButtonDelete ist es z.B.
// intern:
private void OnDelete(object sender, EventArgs e)
{ if (this.Validate() && (this.bindingSource != null))
{ this.bindingSource.RemoveCurrent();
this.RefreshItemsInternal();
}
}
// oder bei Button AddNew:
private void OnAddNew(object sender, EventArgs e)
{ if (this.Validate() && (this.bindingSource != null))
{ this.bindingSource.AddNew();
this.RefreshItemsInternal();
}
}
Das einfachste ist hier, im Designer den
Button zu kopieren und in den BindingNavigator
oben wieder einzufügen. Dadurch geht das
automatische WireUpButton-Mapping des
Handlers verloren (was Du erreichen möchtest).
Du machst auf dem neuen Button einen
Doppel-Klick und fügst Deinen Code
in diesen Handler ein.
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Ich möchte nämlich die Ereignisse abändern.
Gruß
Soheil A.
> Hallo Frank danke für deine Hilfe. Ich kann aber die OnDelete und die AddNew
> Methoden nicht finden. Sie sind intern hast du gesagt. Da werden sie wohl
> sein. Ich möchte nämlich die Ereignisse abändern.
Genau, und deshalb Button kopieren, wie ich gesagt
habe. Dadurch werden die internen Methoden
quasi gelöscht. Nun ganz normal auf den
(kopierten) Button einen Doppelklick und dort
Deinen Code einfügen.
ich habe dich schon richtig verstanden. Aber ich meine nun die anderen
Buttons wie MoveFirstItem und z.B. AddItem, dessen Code ich gerne hätte! Wo
finde ich denn den Code? Um den Code aus den internen Methoden zu kopieren
und in einen neuen Button-Event einzufügen?
gruß
Soheil Amjadi
> ich habe dich schon richtig verstanden. Aber ich meine nun die anderen
> Buttons wie MoveFirstItem und z.B. AddItem,
> dessen Code ich gerne hätte! Wo finde ich denn den Code?
> Um den Code aus den internen Methoden zu kopieren
> und in einen neuen Button-Event einzufügen?
Den internen Code direkt soll man nicht benutzen.
Er könnte sich ja auch ändern bei späteren Frameworks.
Hier das, was dem in etwa entspricht:
// für Löschen:
private void toolStripButton1_Click(object sender,EventArgs e)
{
ToolStripItem ti = sender as ToolStripItem;
if (ti == null) return;
BindingNavigator bn = ti.Owner as BindingNavigator;
if (bn == null) return;
if (bn.Validate() && (bn.BindingSource != null))
{
// folgendes ggf. ersetzen mit MoveNext, AddNew, etc.
bn.BindingSource.RemoveCurrent();
bn.Refresh();
}
}
Um einem neuen Button eine solche Funktionalität
hinzuzufügen, kannst Du etwa soetwas:
customersBindingNavigator.DeleteItem = toolStripButton1;
machen.
Aber ich gehe recht in der Annahme, dass Dein
Problem jetzt gelöst ist?
[Anhang: interne Implementationen]
private void OnAddNew(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.AddNew();
RefreshItemsInternal();
}
}
private void OnDelete(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.RemoveCurrent();
RefreshItemsInternal();
}
}
private void OnMoveFirst(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.MoveFirst();
RefreshItemsInternal();
}
}
private void OnMoveLast(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.MoveLast();
RefreshItemsInternal();
}
}
private void OnMoveNext(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.MoveNext();
RefreshItemsInternal();
}
}
private void OnMovePrevious(object sender, EventArgs e)
{
if (this.Validate() && (this.bindingSource != null))
{
this.bindingSource.MovePrevious();
RefreshItemsInternal();
Ciao
Soheil
this.bindingNavigatorDeleteItem.DisplayStyle =
System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.bindingNavigatorDeleteItem.Image =
((System.Drawing.Image)(resources.GetObject("bindingNavigatorDeleteItem.Image")));
Wenn ich auf Insert Standard Items klicke, dann fügt er auch nicht
deleteItem hinzu.
Hoffe es gibt ein Lösungsvorschlag.
Danke
Soheil Amjadi
"Frank Dzaebel" wrote:
> Komischerweise sind [auf einmal] die Bilder
> der Items weg. Ich kann sie ja auch nicht per
> code hinzufügen...
wäre schön, wenn Du das als neuen Thread
erstellen würdest. Dieser war ja gelöst.
Werde dann da antworten. OK?
das Problem habe ich anders gelöst. Ich habe die Bilder (deleteItem-logo,
speichern-logo) einfacher gefunden als ich dachte. Im Visual Studio
Verzeichnis. Ich werde nun jetzt die Logos alle einfach umändern, um sie
gleichaussehend zu machen.
Könntest du mir bei diesem Thread helfen?
Gruß
Soheil
gut Dein Problem ist also gelöst, schön.
> Könntest du mir bei diesem Thread helfen? [...]
ja, ich habe schon ein Posting abgesetzt.