Ich bin schon seit längerem auf der Suche nach einer wirklich guten Erweiterung für das .NET Framework! Darf ruhig auch eine Stange Geld kosten. Habe vor ca. einem halben Jahr .NET Magic lizensiert, war aber schliesslich sehr enttäuscht davon.
Dieses NetAdvantage sieht ja nicht schlecht aus, aber ich bin halt etwas vorsichtig geworden nach DotNetMagic...
Ist leider nicht genau das, was ich suche, gibts denn sowas kostenpflichtig? Währe kein Problem!
Hallo zusammen, ich bräuchte ein Control, welches es mir ermöglicht in einer Zelle der Tabelle eine Untertabelle anzulegen resp. Ein DataGridView im DataGridView. Ist so etwas möglich und wenn ja, wie?
Lg Ishildur
Hallo Leute, also irgendwie funktioniert heute überhaupt nichts!
Ich habe folgendes Codefragment:
DataRowView row = (DataRowView)this.dtaSrc.AddNew();
row["Contact_ID"] = Guid.NewGuid();
this.dtaViw.BeginEdit(false);
Aus irgendeinem Grund ist das Teil aber anschliessend nicht im Edit - Mode
Woran könnte das liegen? Habe echt keine Ahnung mehr.
Ich habe noch einen Event:
// ----------------- event - handler for the event "dtaViw_CellDoubleClick" -----------------
private void dtaViw_CellDoubleClick(object sender,DataGridViewCellEventArgs e) {
// begin an edit operation
this.dtaViw.BeginEdit(true);
}
// ------------------------------------------------------------------------------------------
Da funktionierts einwandfrei
Ja die verwende ich bei den DataBindings, aber beim DataGridView habe ich da vergeblich gesucht...
Hallo zusammen
Nach eingehender Testphase habe ich herausgefunden, dass das DataGridView die Daten mit dem darunterliegenden BindingSource abgleicht, sobald die Zelle verlassen wird. Nun ist es aber für mein Programm erforderlich, dass dies geschiet, sobald sich der Wert einer Zelle verändert und nicht erst, wenn die Zelle verlassen wird. Kann man dies irgendwie einstellen?
Gruss Ishildur
Hat denn keine eine Idee, ich werde noch Wahnsinnig hier! Jetzt hat das Monatelang funktioniert und von heute auf morgen funktionierts einfach plötzlich nicht mehr, das ist doch icht normal, verdammte Scheisse noch einmal!!!
Wenn ich BindingSource.AddNew() aufrufe, dann passiert einfach überhaupt gar nichts, das BindingSource ist folgendermassen aufgebaut:
BindingSource dtaSrc = new BindingSource();
dtaSrc.DataSource = this.dtaSet; // dataset
dtaSrc.DataMemeber = "Contact";
int pre = dtaSrc.Count;
object obj = dtaSrc.AddNew();
int pst = dtsSrc.Count;
Nachher sind pre und pst gleich gross und obj enthält ein korrektes Objekt. dtaSrc.Current wird einfach nur auf das letzte Element gesetzt! 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜 😜
Hallo zusammen
Aus irgendeinem Grund funktioniert einfach plötzlich BindingSource.AddNew() nicht mehr!
Also ich mache folgendes:
try{
this.dtaSrc.Count;
this.dtaSrc.AddNew();
this.dtaSrc.Count;
}
catch(InvalidOperationException){
MessageBox.Show("Ach daher...");
}
Also das count vor AddNew sowie das Count danach weist denselben Wert auf und Exception wird keine geworfen... Also ich bin echt sprachlos! 8o
P.S.
Das zugrundeliegende DataSource ist eine DataTable
Also ich bin mir ziemlich sicher, dass ich das DataSource in meinem Falle ein BindingSource immer dann geupdated wurde, wenn sich das entsprechende Propertie des gebundenen Controls verändert hat. Aber nun geschiet dies plötzlich erst nach der Validierung, was leider nicht so toll ist. Ich habe fast das Gefühl, dass dies passiert, seit ich WindowsUpdate ausgeführt hatte. Ich hoffe doch sehr, dass Microsoft nicht einfach gewisse Dinge im .NET SDK ändert und diese dann einfach mittels WindowsUpdate ohne ein Mucks auf die Platte knallt oder was? 8o
Nun, wie dem auch sei...
Wenn ich nun bei jedem einzelnen DataBinding noch im SourceEditor die Zeile
this.tbxCnt.DataBinding.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged hinzufüge, dann klappts, das kanns aber doch nicht sein, oder? Gibst da vielleicht eine einfachere Variante, dass ich dies bspw. irgendwo global definieren kann?
@.unreal
Ja, ich habe ein BindingSource als DataSource des DataGridView, ber wenn ich im Validating - Event EndCurrentEdit aufrufe, dann bekomme ich doch das Problem, dass das DataGridView nach erfolgreichem validieren diese Methode noch einmal von sich aus aufruft oder vielleicht doch nicht?
Hallo zusammen
Wie ich gesagt, ich habe massive Probleme mit dem DataGridView Control:
Im Event Validating kann ich ja e.Cancel = true setzte, damit die Aktion abgebrochen und die aktive Zelle wieder in den Input - Modus gelangt. Das ist ja schön und gut, nur kann ich dann leider auch den Schliessen - Knopf des Formulars nicht mehr klicken. Ausserdem funktioniert das ja nicht für ConstraintExceptions, welche ich im Event DataError behandeln muss. Wenn der Benutzer also einen Doppelten Datensatz eingibt, dann kann ich Validating gar nichts machen, da dieser ja erst beim Aufruf von EndEdit ausgelöst wird. Diese wiederum wird ja vom DataGridView ausgelöst, wenn ich in Validating nicht e.Cancel = true gesetzt habe.
Gibt es vielleicht eine Möglichkeit, den Zeitpunkt von EndEdit selbst festzulegen ohne gleich in den Virtual Mode wechseln zu müssen. Denn alles selber machen mag ich auch nicht!
Gruss Ishildur
Habe auch folgendes versucht:
// write values back to the datasource
foreach(Binding bnd in this.ActiveControl.DataBindings) bnd.WriteValue();
Dies führt aber dann dazu, dass IsEdit true zurückgibt, obwohl die Werte sich überhaupt nicht verändert haben!
Hallo Leute
Ich habe folgende Situation (sehr vereinfacht! 😄)
if(((DataRowView)this.dtaSrc.Current).IsEdit){}
Dies funktioniert aber natürlich nur, wenn die Eingabe der TextBox abgeschlossen ist. Leider ist es aber nun so, dass die TextBox den Fokus behält, wenn ich auf einen Knopf im BindingNavigator klicke. Nun habe ich versucht, einfach dem BindingNavigator den Fokus zu übergeben, sobald ich den entsprechenden Knopf drücke
this.dtaNav.SetFocus()
Leider hat dies nichts gebracht!
Lange Rede kurzer Sinn, meine Frage ist nun eigentlich sehr einfach:
Wie kann ich Programmtechnisch erreicht, die Eingabe in einem Textfeld abgeschlossen ist?
Lg Ishildur
ich Idiot, nein es passiert bereits in der zweiten Zeile
Habe das Problem so halbherzig gelöst:
this.dtaViw.AutoGenerateColumns = false;
Und alles ist gut!
Aber wieso verstehe ich überhaupt nicht. Es ist allerdings so, dass ich dies sowie machen muss, da ich ansonsten sämtliche Spalten des DataSet angezeigt werden und wer will sich schon die Guid's reinziehen? 😉
Hallo Herbivore
Also, dass kann ich mir eigentlich kaum vorstellen, nan muss ja irgendwie definieren, welche Spalten ich nun angezeigt haben möchte und welche nicht. Allerdings spielt dies in diesem Codebeispiele auch keine Rolle, da die Exception geworfen wird, bevor ich manuell die Spalte einfüge...
Nun ja, das war mir schon klar, aber ich hätte eben nicht auf die Funktionilät des BindingNavigator verzichten wollen, da diese ja an sich ganz toll ist, nur eben mit der Ausnahme, dass man die Aktion nicht abbrechen kann!
Einen wunderschönen guten Morgen, meine lieben Mitprogrammierer
Kaum hat der Tag angefangen und noch bevor ich auch nur 5 Minuten im Büro bin, schon stosse ich auf ein Problem auf:
// assign the datasource
this.DataSource = new BindingSource(this.dtaSet,this.strTbl);
// setup the datagrid - view
this.dtaViw.DataSource = this.DataSource;
this.dtaViw.Columns.Add(this.strVal,this.strVal);
Die dritte Codezeile endet in einer InvalidOperationException? 8o
Aus der Fehlermeldung werd ich echt nicht schlau:
Operation did not succeed because the program cannot commit or quit a cell value change.
Operation war nicht erfolgreich, weil das Programm einen Zellenwertwechsel nicht bestätigen oder beenden konnte.
Nun ja, aber was bedeuten denn nun diese Worte? Kann ich mir echt keinen Reim drauf machen, vielleicht hat jemand von euch da mehr Erfahrung?
Einen schönen Tag wünsche ich euch allen!
Hey super, das ist genau das, was ich brauche! 🙂 freu
Danke Noodles
Hallo zusammen, ich kriege es einfach nicht hin, etwas auf den Bildschirm zu Rendern un bin echt frustiert! Ich habe bereits eine komplette 3D - Engine mit DirectX in C++ geschrieben, welche einwandfrei funktioniert, aber mit den Managed DirectX9.0 funzt das irgendwie nicht!
Nach langem habe ich festgestellt, dass irgendwie auf die abstruusendsten Fehler keine Exceptions geworfen werden:
Hier einige Beispiele:
Mesh.Box(this.dev,0.0f,0.0f,0);
Keine Exception? 8o
this.cli.DrawSubset(982374)
Keine Exception? 8o
this.dev.SetTexture(100,null);
Keine Exception? 8o
Also keine Exception, aber gerendert wird auch überhaupt nichts...
Also, was läuft denn da?
Hallo zusammen
Gibt es eine Möglichkeit, in DataGridViews Gruppen zu definieren, wie es bspw. in ListViews möglich ist und wenn ja wie resp. falls nicht, gibt es vielleicht ein anderes Control?
Lg Ishildur
Has its haut gliich neu implementiert, sonä ver&ç% Scheisse!!!!
// --------------------- event - handler for the event "mnuNavAdd_Click" --------------------
private void mnuNavPos_Click(object sender,EventArgs e) {
// return if the data - validation didn't succeed
if(!this.ValidateData()) return;
// refresh the data - population
this.dtaSrc.CurrencyManager.Refresh();
// move to the correct record
if(sender == this.mnuNavFst) this.dtaSrc.MoveFirst();
else if(sender == this.mnuNavPrv) this.dtaSrc.MovePrevious();
else if(sender == this.mnuNavNxt) this.dtaSrc.MoveNext();
else if(sender == this.mnuNavLst) this.dtaSrc.MoveLast();
else {
// open a try - statement as there may occure a format - exception
try {
// try to parse the current - number
int pos = Int32.Parse(this.mnuNavPos.Text)+1;
// move to the concerning record if possible or to the last one
if(pos < this.dtaSrc.Count) this.dtaSrc.Position = pos;
else this.dtaSrc.MoveLast();
}
// a format - exception occured
catch(FormatException) {
// move to the first record and set the number
this.dtaSrc.MoveFirst();
this.mnuNavPos.Text = "1";
}
}
// set the current position
this.mnuNavPos.Text = (this.dtaSrc.Position+1).ToString();
// enable and disable the buttons as necessary
this.mnuNavFst.Enabled = this.mnuNavPrv.Enabled = dtaSrc.Position > 0;
this.mnuNavNxt.Enabled = this.mnuNavLst.Enabled = dtaSrc.Position < this.dtaSrc.Count-1;
}
// ------------------------------------------------------------------------------------------
Hi Leute, ich bins noch einmal, sorry wenn ich das Forum beinahe ein wenig überstrapaziere, aber irgendwie habe ich voll keinen Durchblick mehr!
Wenn ich beim BindingNavigator auf eine der Pfeiltaste drücke, um bspw. zum nächsten Datensatz zu gelangen, dann ruft der anscheinend intern noch schnell, schnell EndEdit() auf dem DataSource auf, könnte das sein? Kann man das irgendwie umgehen? Ich muss doch noch eine Datenprüfung machen und gegebenenfalls Canceledit aufrufen!
Gruss Ishildur
P.S.
Dass ich einfach die Funktionlität des der Knöpfe komplett entfernen kann, ist mir schon klar, aber dann währe dieses Control schliesslich vollends nutzlos, immerhin musste ich schon add und delete komplett neu schreiben!
Wenn der Benutzer auf den "Datensatz Entfernen" Knopf des BindingNavigator drückt, so möchte ich einen Dialogbox erscheinen lassen, ob er diesen wirklich löschen möchte. Doch wie mache ich das, den Klick Event kann ich ja nicht abfangen! Ist folgendes die einzige Möglichkeit? Das darf doch nicht wahr sein!
// add a new event to catch
DataTable dtaTbl = ((DataSet)this.bndSrc.DataSource).Tables[this.bndSrc.DataMember];
dtaTbl.RowDeleting +=new DataRowChangeEventHandler(FRM_DataEdit_RowDeleting);
Das Zweite Problem habe ich gelöst: BindingSource.CurrencyManager.Refresh()
Aber irgendwie habe ich da nicht so den Durchblick, was hat es eigentlich mit diesem CurrencyManager auf sich?
Halli hallo und einen wunderschönen guten Morgen
Wie kann ich denn mit BindingSource.AddNew() ein neues Item anlegen, ohne dass dieses alsgleich in der zugrundeliegenden DataTable eingefügt wird?
Und gleich noch eine weitere Frage:
Wenn ich einen neuen Datensatz mit BindingSource.AddNew() einfüge, noch was daran umändere und schliesslich wieder EndEdit aufrufen, dann ändert sich im DataGridView, welche dasselbe BindingSource verwendet, leider gar nichts. Erst wenn ich dann BindingSource.MoveNext() aufrufe, wird das DataGridView aktualisiert, woran liegt dass?
Hallo zusammen
Wenn ich bspw. 2 Controls mit der Eingenschaft DockStyle.Top habe, wie wird dann entschieden, welches nun zuoberst ist?
Gruss Ishildur
Hallo zusammen,
Hui, hoffentlich kann ich mein Problem einigermassen anschaulich darstellen (stark vereinfacht):
Nun bräuchte ich einen Event, der aufgerufen wird, sobald der Benutzer in einem der Controls etwas ändert. TextBox.TextChanged funktioniert leider nicht, da dieser ja auch ausgelöst wird, wenn ich mit Hife des BindingNavigator auf einen anderen Datensatz wechsle.
BindingSource.CurrentItemChanged spricht leider erst an, nachdem BindingSource.EndEdit() aufgerufen wurde.
Hat da jemand von euch eine Idee?
Lg Ishildur
@cx° und svenson
Also ich habe mich schon informiert, da hiess und heisst es immer noch
"Das .NET Framework ist eine Programmierschnittstelle unabhängig von Betriebssystem und Hersteller..."
Und Svenson
Java hat zwar kein DirectX, dafür aber eine eigene 3D Lib, die auf jedem System funktioniert und das mit der Registry finde ich ja auch nicht so schlimm. Aber keine Windows Forms, soll ich etwas nur noch Konsolenprogramme schreiben oder was? fluch
Kein DirectX, keine 3D - Statistiken -> Naja X(
Aber keine Windows Forms ???????? 8o 8o 8o
Also als ich mich für .NET entschieden hatte, war dies aufgrund der versprochenen Plattformunabhängigkeit!!!
Also ich will euch ja nicht die gute Laune verderben, aber nennt ihr dies vielleicht Plattformunabhängig?
Heilige Scheisse, hätte ich doch zu Java gegriffen!
Ja OK, das mit der Registry ist halb so wild, damit kann ich leben, wenn nur alles Andere funzt ! 🙂
Ich habe das Mono nun auf den Mac installiert, die CLI in Form meiner Window Exe kann ich aber dort nicht ausführen! (Wieso bin ich bloss nicht überrascht 😄)
Was muss ich den tun, damit das funzt, muss ichs neu kompilieren oder sowas? Sollte doch eigentlich nicht nötig sein?
Ach ja, noch etwas? Wird DirectX irgendwie gemappt? Denn das brauche ich in meiner Applikation ebenfalls, um frei rotierbare 3D - Statistiken zu erzeugen...
Ich nehme mal an, .Net Magic wird nicht unterstützt?
Ich nehme mal auch an, dass die Registry nicht unterstützt wird?
Und da kann ich nur dieses Mono - Dings auf dem Mac installieren und meine CLI läuft da einfach so? [:skeptisch⚠
Da war ich schon, aber das unterstützt doch kein ADO .NET?
Hallo zusammen
Ich habe eine ADO .NET2.0 Applikation in C# geschrieben. Nun soll diese auch auf Macintosh laufen. Wie kriege ich dass hin. Viele sagen ja, einer der wichtigsten Vorteile vom .NET Framework sei ja die Plattformunabhängigkeit wie bei Java.
Lg Ishildur
Ach so ist das, aber wieso heisst die Meldung dann, dass ein Reader mit demselben SqlCommand verknüpft sei, ist das ein Fehler?
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace TophairConverter {
class Program {
static void Main(string[] args) {
// create and setup the source connection - string
SqlConnectionStringBuilder sqlStrSrc = new SqlConnectionStringBuilder();
sqlStrSrc.DataSource = "Hauptserver.Quasar";
sqlStrSrc.ConnectTimeout = 30;
sqlStrSrc.InitialCatalog = "TopHair";
sqlStrSrc.UserID = "<nönö>";
sqlStrSrc.Password = "<nönö>";
// create and setup the destination connection - string
SqlConnectionStringBuilder sqlStrDst = new SqlConnectionStringBuilder(sqlStrSrc.ToString());
sqlStrDst.InitialCatalog = "TopHair2";
// create both connections
SqlConnection sqlConSrc = new SqlConnection(sqlStrSrc.ToString());
SqlConnection sqlConDst = new SqlConnection(sqlStrDst.ToString());
// open a try - statement as there may be thrown an exception
try {
// open both connections
sqlConSrc.Open();
sqlConDst.Open();
// inform the user
Console.WriteLine("Connection established...");
}
// an exception has been thrown
catch(SqlException e) {
// inform the user and exit the application
Console.WriteLine(e.Message);
Console.Read();
return;
}
// delete all exising records
new SqlCommand("DELETE FROM Person",sqlConDst).ExecuteNonQuery();
// get a list of country - GUID's
List<Guid> lstGuid = new List<Guid>();
SqlCommand sqlCmdCty = new SqlCommand("SELECT Country_ID,Name FROM Country",sqlConDst);
SqlDataReader sqlRdrCty = sqlCmdCty.ExecuteReader();
while(sqlRdrCty.Read()) {
lstGuid.Add(sqlRdrCty.GetGuid(0));
Console.WriteLine(sqlRdrCty.GetString(1)+":\t"+sqlRdrCty.GetGuid(0).ToString());
}
// define the insert command
String strIns = "INSERT INTO Person(Person_ID,Country_ID,Nationality_ID,Title,";
strIns += "PersonalName,FamilyName,Birthdate,Civilstate,Profession,AHV,Adress,Zip,Place,";
strIns += "Postcase,Description,Picture,News,Inserted,Locked) VALUES(@Person_ID,";
strIns += "@Country_ID,@Nationality_ID,@Title,@PersonalName,@FamilyName,@Birthdate,";
strIns += "@Civilstate,@Profession,@AHV,@Adress,@Zip,@Place,@Postcase,@Description,";
SqlCommand sqlCmdIns = new SqlCommand(strIns,sqlConDst);
// define the parameter list
sqlCmdIns.Parameters.Add("Person_ID",SqlDbType.UniqueIdentifier);
sqlCmdIns.Parameters.Add("Country_ID",SqlDbType.UniqueIdentifier);
sqlCmdIns.Parameters.Add("Nationality_ID",SqlDbType.UniqueIdentifier);
sqlCmdIns.Parameters.Add("Title",SqlDbType.TinyInt);
sqlCmdIns.Parameters.Add("PersonalName",SqlDbType.VarChar,20);
sqlCmdIns.Parameters.Add("FamilyName",SqlDbType.VarChar,20);
sqlCmdIns.Parameters.Add("Birthdate",SqlDbType.DateTime);
sqlCmdIns.Parameters.Add("Civilstate",SqlDbType.TinyInt);
sqlCmdIns.Parameters.Add("Profession",SqlDbType.VarChar,50);
sqlCmdIns.Parameters.Add("AHV",SqlDbType.VarChar,20);
sqlCmdIns.Parameters.Add("Adress",SqlDbType.VarChar,50);
sqlCmdIns.Parameters.Add("Zip",SqlDbType.VarChar,10);
sqlCmdIns.Parameters.Add("Place",SqlDbType.VarChar,10);
sqlCmdIns.Parameters.Add("Postcase",SqlDbType.VarChar,50);
sqlCmdIns.Parameters.Add("Description",SqlDbType.Text);
sqlCmdIns.Parameters.Add("Picture",SqlDbType.Image);
sqlCmdIns.Parameters.Add("News",SqlDbType.Bit);
sqlCmdIns.Parameters.Add("Inserted",SqlDbType.DateTime);
sqlCmdIns.Parameters.Add("Locked",SqlDbType.Bit);
// define the select command
String strSel = "SELECT Country_ID,Nationality_ID,Title,PersonalName,";
strSel += "FamilyName,Birthdate,Civilstate,Profession,AHV,Adress,Zip,Place,Postcase,";
strSel += "Description,Picture,News,Inserted FROM Person";
SqlCommand sqlCmdSel = new SqlCommand(strSel,sqlConSrc);
// get the datareader
SqlDataReader sqlRdr = sqlCmdSel.ExecuteReader();
// start a loop for walking each record
while(sqlRdr.Read()){
// output the current record
Console.WriteLine("Converting "+sqlRdr.GetString(3)+" "+sqlRdr.GetString(4)+"...");
// setup the parameters and execute the non-query
sqlCmdIns.Parameters["Person_ID"].Value = Guid.NewGuid();
sqlCmdIns.Parameters["Country_ID"].Value = lstGuid[(int)sqlRdr.GetSqlInt16(0)-1].ToString();
sqlCmdIns.Parameters["Nationality_ID"].Value = lstGuid[(int)sqlRdr.GetSqlInt16(1)-1].ToString();
sqlCmdIns.Parameters["Title"].Value = sqlRdr.GetSqlByte(2);
sqlCmdIns.Parameters["PersonalName"].Value = sqlRdr.GetSqlString(3);
sqlCmdIns.Parameters["FamilyName"].Value = sqlRdr.GetSqlString(4);
sqlCmdIns.Parameters["Birthdate"].Value = sqlRdr.GetSqlDateTime(5);
sqlCmdIns.Parameters["Civilstate"].Value = sqlRdr.GetSqlByte(6); ;
sqlCmdIns.Parameters["Profession"].Value = sqlRdr.GetSqlString(7);
sqlCmdIns.Parameters["AHV"].Value = sqlRdr.GetSqlString(8);
sqlCmdIns.Parameters["Adress"].Value = sqlRdr.GetSqlString(9);
sqlCmdIns.Parameters["Zip"].Value = sqlRdr.GetSqlString(10);
sqlCmdIns.Parameters["Place"].Value = sqlRdr.GetSqlString(11);
sqlCmdIns.Parameters["Postcase"].Value = sqlRdr.GetSqlString(12);
sqlCmdIns.Parameters["Description"].Value = sqlRdr.GetSqlString(13);
sqlCmdIns.Parameters["Picture"].Value = sqlRdr.GetSqlBinary(14);
sqlCmdIns.Parameters["News"].Value = sqlRdr.GetSqlBoolean(15);
sqlCmdIns.Parameters["Inserted"].Value = sqlRdr.GetSqlDateTime(16);
sqlCmdIns.Parameters["Locked"].Value = 0;
// ***************** Hier wird die Exception ausgelöst ******************
sqlCmdIns.ExecuteNonQuery();
// ***************************************************************
}
// avoid automatic closing of the console window
Console.Read();
}
}
}
Hallo Leute, zieht euch mal folgendes rein:
// delete all exising records
new SqlCommand("DELETE FROM Person",sqlConDst).ExecuteNonQuery();
Die Postwendende Antwort des .NET Framwork:
There is already an open DataReader associated with this Command which must be closed first.
Häääää????
Ich hatte bisher gedacht, ich hätte das Prinzip der strukturierten Programmierung wenigstens Ansatzweise verstanden, aber inzwischen frage ich mich, ob das auch für die Entwickler von MS gilt?
Wie kann es sein, dass bereits ein Datenlesen mit diesem Kommando verknüpft ist, wenn ich die Instanzierung jenes Kommandos im selben C# - Befehl ist?
Also es ist zwar zu diesem Zeitpunkt ein DatenLeser geöffnet, aber der ist nichtmal mit derselben SqlConnection verknüpft!
Also das Ganze ist ein Konvertierungsprogramm, da ich in einer Bestehenden Datenbank alle Primärschlüssel vom Typ Int Autoincrement in Guids umwandeln muss! Also habe ich zwei Verbindungen zum selben Server aber auf unterschiedliche Datenbanken. Nun habe ich in der Source - Datenbank einen DataReader offen, aber dieses Kommanda bezieht sich auf die Verbindung zur Destination - Datenbank.
Bitte, bitte sagt mir nicht, dass ich nicht einen Reader offen haben darf und zur gleichen Zeit bestimmte Operationen an einer Anderen Datenbank vornehmen kann! Bitte, bitte sagt das jetzt nicht!!!
Hallo zusammen
Mein DataSet hat eine Tabelle mit Kontakten, welche mit einem Unique - Constraint belegt ist, abgesehen davon darf der Fremdschlüssel nicht DBNull sein. Jetzt habe ich ein BindingSource mit diesem DataSet und der entsprechenden Tabelle verknüpft. Wenn ich nun BindingSource.AddNew() aufrufe, wie erwartet wird nun eine Exception geworfen, dass das der Fremdschlüssel nicht DBNull sein darf. Ich muss also die erforderlichen Werte in der DataRow einsetzten, bevor diese ins DataSet gelegt wird.
Kein Problem, dachte ich mir, fangen wir einfach den Event Adding New des BindingSource ab und setzen die entsprechenden Werte ein. Wenn ich aber nun das Objekt AddingNewEventArgs.NewObject zeigt aber auf null! OK, ist zwar nicht gerade das, was ich mir erhofft habe aber nun gut. Machte ich es halt folgendermassen
DataSet dtaSet = (DataSet)this.bndSrc.DataSource;
DataTable dtaTbl = dtaSet.Tables["Contact"];
DataRow dtaRow = dtaTbl.NewRow();
dtaRow["Person_ID"] = dtaSet.Tables["Person"].Rows[0]["Person_ID"];
dtaRow["Content"] (dtaTbl.Rows.Count+1)+". Nummer";
e.NewObject = dtaRow;
Aber dann kommt er mit dem Fehler, das die Typen nicht identisch seien. Also was soll ich denn bitte schön machen, verflixt noch mal, ich blicke langsam aber sicher überhauot nicht mehr durch!
Gruss Ishildur
Hallo Leute
Wisst ihr, wo ich updates / Patches für den Visual Studio 2005 finde?
Ja das ist mir schon klar, aber dann muss ich auch sämtliche DatagridView, die an diesem DataSource anknüpfen, von Hand initialisieren...
Hallo zusammen
Wenn ich im Desginer ein neues Objekt ins Form gebe, dann erstellt der ja auch das entsprechende Objekt. Manchmal wäre es aber Sinnvoll, ein Objekt nur als Referenz hinzuzufügen.
Ich habe beispielsweise ein Formular, in welchem ich ein DataSource benötige, allerdings brauche ich nur eine Referenz davon, da das reale DataSource im Constructor des Forms übergeben wird. Aber dennoch möchte ich im Designer die Databindings zuweisen!
Gruss Ishildur
Guten Abend allerseits ihr lieben Menschen
Morgen um 17:00 Uhr muss ich mein Projekt vorstellen und es fehlt halt einfach noch hier und da der letzte Schliff, darum ersuche ich erneut euren Rat:
Ich habe ein sher grosses Problem mit diesen verflixten DataGridViews, und zwar folgendes: Wenn ich einen neuen Datensatz erzeuge und anschliessend die Eingabe mit Enter abschliesse, dann wird der Event "CellValidating" aus mir unerklährlichen Gründen nicht ausgelöst! Er wird erst ausgelöst, wenn ich die Zelle verlasse! Mache ich dies mit einem Feld, welches einen bestehenden Datensatz gefüllt ist, funktioniert alles bestens!
Ich möchte mein DataGridView nach einem bestimmten Feld "gruppieren" so ähnlich wie die Gruppen eines ListView! Ist das irgendwie möglich und wenn ja wie?
Ich hoffe wirklich, jemand von euch kann mir helfe, insbesondere zu Punkt eins, der ist wirklich wichtig, das muss bis morgen um 17:00 überall laufen!
Gruss Ishildur
Ich habs geschafft! Dies ist der Code... Tatatata!!!! 😁
// ------------------ event - handler for the event "dtaViw_RowValidating" ------------------
private void dtaViw_RowValidating(object sender,DataGridViewCellCancelEventArgs e) {
// end the current - edit operation
this.dtaViw.EndEdit();
// determine the concerning cell
DataGridViewCell cel = this.dtaViw.CurrentCell;
// check if the value doesn't match the regular - expression
if(!Regex.IsMatch((String)cel.Value,@"^[a-zäöüéèàç]+[\w]*$",RegexOptions.IgnoreCase)) {
// calculate the position of the balloon
Rectangle rctRow = this.dtaViw.GetRowDisplayRectangle(cel.RowIndex,true);
Rectangle rctCol = this.dtaViw.GetColumnDisplayRectangle(cel.ColumnIndex,true);
Rectangle rctIts = Rectangle.Intersect(rctRow,rctCol);
Point pos = new Point(rctIts.X+rctIts.Width/2,rctIts.Y+rctIts.Height/2);
pos = this.dtaViw.PointToScreen(pos);
// show the error and cancel the operation
this.ShowError("Ungültiger Wert","Dieser Wert ist unzulässig",pos);
e.Cancel = true;
}
// otherwise hide the balloon
else this.HideError();
}
// ------------------------------------------------------------------------------------------
@Herbivore
Leider wird dann nur die erste Zeile im Designer erfasst... X(
Aber was ist so schlimm die Zuweisung in den Code zu schreiben?
Die Entwicklungszeit! Wenn ich den Text schnell im Designer ändern kann, dann dauert das einfach weniger lang, als wenn ich die Zeile in meinen abertausenden von Sourcezeilen suchen muss, bevor ich ihn editieren kann! In einem RAD ist meiner Meinung nach Code dazu da, Funktionalität zu realisieren, welche mit den Standarts der IDE nicht möglich sind. Es sollte soviel wie möglich mit der IDE realisiert werden. Privat bin ich dabei eine DirectX - Engine in C++ zu schreiben, das ist eine völlig andere Welt! Ganz ohne Designer! 😁
Gruss Ishildur
Ich möchte, wenn der Benutzer eine fehlerhafte Eingabe in einem DataGridView gemacht hat, an der entsprechenden Stelle einen Tooltip erscheinen lassen. Das Problem ist eben nur, dass ich keine Ahnung habe, wie ich die aktuelle Position der betreffenden Zelle ausfindig machen kann! Vor allem das Scrolling macht folgender Anlauf unbrauchbar:
// ------------------ event - handler for the event "dtaViw_RowValidating" ------------------
private void dtaViw_RowValidating(object sender,DataGridViewCellCancelEventArgs e) {
// end the current - edit operation
this.dtaViw.EndEdit();
// determine the concerning cell and its owning row
DataGridViewCell cel = this.dtaViw.CurrentCell;
DataGridViewRow row = cel.OwningRow;
// check if the value doesn't match the regular - expression
if(!Regex.IsMatch((String)cel.Value,@"^[a-zäöüéèàç]+[\w]*$",RegexOptions.IgnoreCase)) {
// set the error - text and cancel the operation
Point pos = this.dtaViw.PointToScreen(new Point(10,row.Index*row.Height));
this.ShowError("Ungültiger Wert","Dieser Wert ist unzulässig",pos);
e.Cancel = true;
}
// otherwise hide the balloon
else this.HideError();
}
// ------------------------------------------------------------------------------------------
Es kommt dann eine Meldung, dass er Zeichen enthalten sind, welche im aktuellen Zeichensatz nicht enthalten sind und fragt mich, ob er die Scheisse in Unicode speichern soll 😜
Hi there
Gibts irgendsowas wie SysMetrics für .NET? Ich müsste bspw. wissen wie breit die Scrollbars der Controls sind!
Hallo zusammen
Ich möchte, dass der Benutzer in meinem Programme Kommentare schreiben kann. Dafür eignet sich glaube ich eine RichTextBox. Allerdings finde ich nirgends eine Komponente zur schriftauswahlt, schriftgrösse, stiil usw... ??? Wo ist das denn?