Möglichkeiten gibt es immer. Es ist aber unschön die Buttonfunktion aufzurufen.
Mann sollte sowieso Klassendesign verwenden und nicht irgendwelche Funktionen einfach mal hinschreiben. Was wenn die Funktion auch noch woanderes aufgerufen werden soll.
Hallo. Habe folgendes Problem, welches mich echt zum Verzweifeln bringt. Ich will in eine Tabelle via cell1.Controls. Add(DropDownList) eine Dropdownlist einfügen.
Die DropDownList erhält ihre Werte zuvor aus einer Datenbank. Die DropDownList lässt sich auch wunderbar in die Tabelle einfügen und bekommt auch die Werte. Problem ist jetzt allerdings, dass die selectedindexchange Methode der DropDownlist nicht mehr aufgerufen wird sondern ein Fehler angezeigt wird.
Fehlermeldung: "Fehler beim Laden des Ansichtszustands. Die Steuerelementstruktur, in die der Ansichtszustand geladen werden soll, muss mit der Steuerelementstruktur übereinstimmen, die während der letzten Anforderung zum Speichern des Ansichtszustands verwendet wurde. Beim dynamischen Hinzufügen von Steuerelementen müssen die während eines Sendevorgangs hinzugefügten Steuerelemente z.B. in Typ und Position mit den während der ursprünglichen Anforderung hinzugefügten Steuerelementen übereinstimmen. "
Meine Frage ist jetzt, warum meine DropDownListen aufeinmal nicht mehr funktionieren, sobald ich diese in eine Tabelle einbinde. Kann ich, wenn ich Controls verwende nicht mehr mit der selectedchangeindex arbeite?
Hier ein paar relvante Codeausschnitte:
protected void AddDynRows(System.Web.UI.Control con1, System.Web.UI.Control con3)
{
// dynamische Tabelle erstellen
int newRowCount = RowCount;
Table t = new Table();
for (int rowCounter = 0; rowCounter < 1; rowCounter++)
{
TableRow r = new TableRow();
r.CssClass = "tablesubline";
newRowCount++;
// erste Zelle mit Label
TableCell c = new TableCell();
c.ID = "Cell" + newRowCount + 1;
c.Controls.Add(con1);
r.Controls.Add(c);
// zweite Zelle mit DropDownList
**TableCell c2 = new TableCell();
DropDownList mydrop = new DropDownList();
mydrop.SelectedIndexChanged += new EventHandler(mydrop_selectedindexchanged);
mydrop.AutoPostBack = true;
Basisabfrage(mydrop);
c2.Controls.Add(mydrop);**c2.ID = "Cell" + newRowCount + 2;
r.Controls.Add(c2);
// dritte Zelle mit Label
TableCell c3 = new TableCell();
c3.Controls.Add(con3);
r.Controls.Add(c3);
// Zelle mit Button
TableCell c4 = new TableCell();
System.Web.UI.WebControls.Button btn = new System.Web.UI.WebControls.Button();
btn.Text = "Row " + newRowCount;
btn.Click += new EventHandler(RowButtonClick);
c4.ID = "Cell" + rowCounter + 3;
c4.Controls.Add(btn);
r.Controls.Add(c4);
t.Controls.Add(r);
}
t.BorderStyle = System.Web.UI.WebControls.BorderStyle.Solid;
t.BorderWidth = 1;
this.form1.Controls.Add(t);
RowCount = newRowCount;
}
void mydrop_selectedindexchanged(object sender, EventArgs e)
{
rebuildDynRows();
}
Wäre echt dankbar für jede Hilfe!
Gruß bungee2002
Hallo,
schau dir mal die Funktion "GetOleDbSchemaTable" der "OleDbConnection" Klasse an.
Mit der richtigen "OleDbSchemaGuid" wie z.B. "Table_Constraints" kannst du dir dann die Informationen ranziehen.
Gruß
Michael
du könntest n datagridview verwenden, bei dem kannste afaik einiges an sachen einstellen, wie die cells und columns etc aussehen. habe das mal gemacht und nen tree rein implementiert.
du kannst der datagridview auch einfach von hand quasi zeilen hinzufügen mit:
DataGridView dgvTemp = new DataGridView();
dgvTemp.Rows.Add(new DataGridViewRow());
also so übersichtsweise. müsstest dich halt mit der api nochmal auseinander setzen, um für deine aufgaben alles herauszufinden.
aber mit der datagridview gehts auf jeden fall, ist recht mächtig das ding
Hi.
Folgendes:
Wenn ich auf einem TabControl in der Anwendung mit Rechts klicke, geht ein Contextmenü auf. Jedoch fühlt sich beim draufklicken die TabPage angesprochen.
Ich habe demnach ein Event dort abgefangen.
Durch den Rechtsklick sollen Funktionen dargestellt wie "Schließen, Andere Schließen, Alle Schließen u.s.w.". Es ist also so eine Leiste wie die TabPages in Browsern.
Über die TabPage (also beim Rechtsklicken den Registrierkarten) kann ich aber irgendwie nicht abfragen, welche Registrierkarte ich genau geklickt habe. Selbst über ein paar Child-oder Member-Funktionen bekam ich das nicht raus.
Wenn ich das Event versuchen würde, über jeden einzelnen TabControl (bei Visual C# 2005 heißt die Eigenschaft z.B. "ToolStrip1 auf TapPage1") seperat zu ziehen, readgiert der Klickbereich nicht mehr, sondern das Contextmenü erscheint auf der Fläche des TabControls.
Weiß jemand eine Lösung auf dieses Problem?
Guten Tag allerseits!
Habe eine Frage zu diesem Code:
DataTable t1 = new DataTable();
t1.Columns.Add("id");
DataTable t2 = new DataTable();
t2.Columns.Add("id_t1");
DataSet ds = new DataSet();
ds.Tables.Add(t1);
ds.Tables.Add(t2);
ds.Relations.Add("test", t1.Columns[0], t2.Columns[0]);
DataRow dtT1 = t1.NewRow();
dtT1["id"] = 1;
t1.Rows.Add(dtT1);
DataRow dtT2 = t2.NewRow();
dtT2["id_t1"] = 1;
t2.Rows.Add(dtT2);
ds.AcceptChanges();
t1.Rows[0].Delete(); // <--
t1.AcceptChanges();
Es bestehnt eine Parent/Childbeziehung. Warum ist das Löschen der Parentzeile möglich? Auf DB-Ebene dürfte das nicht gehen.
Hi Boris,
Deine Typen sind falsch. 'Long' hat, wie Du schon bemerkt hast, die Breite 64 Bit. Die Parameter der Funktion sind aber vom Typ DWORD, also 32 Bit. Besser ist es sogar, wenn Du den ersten Parameter als IntPtr deklarierst und übergibst, das ist intern nämlich ein HWND und der kann unter einigen Systemen breiter sein, nämlich AFAIR 96 Bit (stimmt das?), jedenfalls die gleiche Breite wie ein System.IntPtr.
Übrigens würde ich Dir vorschlagen, Deine VB-Fragen doch in einem VB-Forum zu stellen, z.B. auf ActiveVB.
Zurück zum Problem, deklarier die Funktion so:
Declare Function ShowWindow Lib "kernel32"(hwnd As IntPtr, showCmd As Int32) As Boolean
und ruf sie so auf:
ShowWindow(Me.Handle, 5)
Am besten ist es aber, Du führst ein Enum für die möglichen Show-Kommandos ein.
Tomt0m! Kannst Du bitte endlich mal zur Kenntnis nehmen, dass das hier nicht das C-Forum ist? Deine Fragen sind hier am falschen Platz. Dieses Forum beschäftigt sich mit C#. Stell Deine Fragen gefälligst im C-Forum!