Du musst halt abfragen, wie sich der Wert geändert hat
Und hast du da ein konkreter Vorschlag? Also wozu macht man einen Event ValueChanged der auch ab und zu einfach mal Aufgerufen wird, wenn sich kein Wert geändert hat? 🤔 Was man davon halten soll...
Ja, das habe ich erst auch gedacht, aber dieser Event wird leider auch beim Starten der Applikation einfach so mal zweimal aufgerufen, wodurch natürlich dann Operationen ausgeführt werden würden, die nicht ausgeführt werden sollen...
Hallo zusammen!
Der Event CloseUp wird aufgerufen, nachdem der Benutzer einen Wert aus dem DateTimePicker ausgewählt hat, aber welcher Event wird aufgerufen, wenn sich der Status der CheckBox innerhalb des DateTimePicker verändert hat?
Gruss Ishildur
Hallo zusammen, ich habe ein Problem bei der Formulierung eines SQL - Querys:
Ich habe einen Kundenstamm sowie einen Produktestamm. Nun kann der gleiche Kunde mehrmals dasselbe Produkt erwerben und dasselbe Produkt kann natürlich auch von mehreren Kunden gekauft werden. Ich habe dazu also eine Zwischentabelle für diese m:n Datenbeziehung.
Nun möchte ich beispielsweise alle Produkte auflisten, welche ein bestimmter Kunde jemals gekauft hat. Dies ist noch kein Problem:
SELECT Name FROM Purchase LEFT JOIN Product ON Purchase.Product_ID = Product.Product_ID WHERE Purchase.Customer_ID = @Customer_ID
Da ja aber nun derselbe Kunde dasselbe Produkt mehrmals erwerben kann, habe ich natürlich das Problem, dass dasselbe Produkt mehrmals in der Liste auftauchen kann. Dies kann man folgendermassen umgehen:
SELECT DISTINCT Name FROM Purchase LEFT JOIN Product ON Purchase.Product_ID = Product.Product_ID WHERE Purchase.Customer_ID = @Customer_ID
Nun fände ich es allerdings cool, wenn in einer weiteren Spalte die Anzahl Käufe jedes Produkts aufgelistet werden würden. Ich habe dies mit einer Group by Klausel versucht, allerdings funktioniert dies einfach nicht:
SELECT Name,Count(Product_ID) FROM Purchase LEFT JOIN Product ON Purchase.Product_ID = Product.Product_ID WHERE Purchase.Customer_ID = @Customer_ID GROUP BY Purchase.Product_ID
Er kommt dann mit folgender Meldung
Column 'Product.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Es ist mir klar, dass es nicht funktionieren kann, wenn ich Spalten ohne Aggregatfunktion der eigenen Tabelle im Select Statement habe, allerdings sind diese ja in jetztigen Falle in der Detailtabelle, nach welcher sortiert wird, nur weiss SQL das wohl nicht...
Ich habe auch versucht, von der Anderen Seite her mit right join, hatte aber keinen Einfluss auf das Resultat...
Hat jemand eine Idee?
Lg Ishildur
Hallo zusammen, gibt es sowas wie typedef in C++?
Ich benutze .NET Magic und möchte ein TabPage nicht folgendermassen definieren müssen:
Crownwood.DotNetMagic.Controls.TabPage tab = new Crownwood.DotNetMagic.Controls.TabPage
Das Problem ist ja, dass wenn ich nur TabPage verwende, dann meldet er einen Ambigous Datatypes System.Windows.Forms.TabPage
Ich brauche nun mal beide Namespaces...
Hallo zusammen
Wenn ich unter WinXP den Arbeitsplatz öffne, dann hat es auf der linken Seite so ein schönes Control ("Systemaufgaben","Andere Ort" und "Details"
Gibt es so ein Control schon, oder muss ich das selber machen, wenn ich so eins n meinem Programm möchte?
Lg Ishildur
Wenn ich es so mache, dann funktioniert alles einwandfrei, aber das darf doch nicht wahr sein. Sowas stärkt nicht gerade mein Vertrauen in ADO.NET... 😭
// ------------------------------- method "LoadOrRefreshData" -------------------------------
public bool LoadOrRefreshData() {
// throw an exception if the sql - connection wasn't defined
if(this.sqlCon == null)
throw new InvalidOperationException("Connection must be set first");
// declare and init local variables
String strCol = this.dtaSet.Tables[0].PrimaryKey[0].ColumnName;
Guid guiID = Guid.Empty;
// retreive the primary - key value of the current record if any
if(this.dtaSrc.Current != null) guiID = (Guid)((DataRowView)this.dtaSrc.Current)[strCol];
// open a try - statement as there may be thrown an exception
try {
// clear the datatable
this.DataTable.Clear();
// setup the datastructures as needed
this.SetupSelectCommand();
this.sqlAdp.SelectCommand.Connection = this.Connection;
// fill the datatable
this.sqlAdp.Fill(this.dtaSet.Tables[0]);
// set the last position if known
if(guiID != Guid.Empty){
// start a loop for walking each object inside the IList
for(int i=0,c=this.dtaSrc.List.Count;i<c;++i){
// check if the current row is the matching row
if((Guid)((DataRowView)this.dtaSrc.List[i])[strCol] == guiID) {
// set the position to the current index and break the loop
this.dtaSrc.Position = i;
break;
}
}
//this.dtaSrc.Position = this.dtaSrc.Find(this.dtaSet.Tables[0].TableName,guiID);
}
// refresh the time of the last refresh and return
this.datRfr = DateTime.Now;
return true;
}
// an sql - exception has been thrown
catch(SqlException exp) {
// show a dialog to the user and return false
new FRM_Exception(this.sqlAdp,exp,this.Connection).ShowDialog();
return false;
}
}
// ------------------------------------------------------------------------------------------
Hier ist noch der Code der entsprechenden Funktion:
// ------------------------------- method "LoadOrRefreshData" -------------------------------
public bool LoadOrRefreshData() {
// throw an exception if the sql - connection wasn't defined
if(this.sqlCon == null)
throw new InvalidOperationException("Connection must be set first");
// declare and init local variables
String strCol = this.dtaSet.Tables[0].PrimaryKey[0].ColumnName;
Guid guiID = Guid.Empty;
// retreive the primary - key value of the current record if any
if(this.dtaSrc.Current != null) guiID = (Guid)((DataRowView)this.dtaSrc.Current)[strCol];
// open a try - statement as there may be thrown an exception
try {
// clear the datatable
this.DataTable.Clear();
// setup the datastructures as needed
this.SetupSelectCommand();
this.sqlAdp.SelectCommand.Connection = this.Connection;
// fill the datatable
this.sqlAdp.Fill(this.dtaSet.Tables[0]);
// set the last position if known
if(guiID != Guid.Empty) this.dtaSrc.Position = this.dtaSrc.Find(strCol,guiID);
// refresh the time of the last refresh and return
this.datRfr = DateTime.Now;
return true;
}
// an sql - exception has been thrown
catch(SqlException exp) {
// show a dialog to the user and return false
new FRM_Exception(this.sqlAdp,exp,this.Connection).ShowDialog();
return false;
}
}
// ------------------------------------------------------------------------------------------
Hat wirklich niemand eine Idee, was daran falsch sein könnte? Die DataSource ist ein DataSet!
Ich habe mir auch schon überlegt, ob dies der Grund sein könnte, doch dann würde ja eine InvalidOperationException und keine ArgumentException geworfen, oder?
Lg Ishildur
Hat noch niemals jemand von euch die BindingSource.Find funktion verwendet? 8o
Wieso machen die denn das auch protected, verflixt noch eins ??!!
Hallo zusammen
Ich kriege irgendwie die BindingSource.Find Method nicht auf die Reihe:
Hier ein kleiner Ausschnitt aus meinem Debugger:
((DataRowView)this.dtaSrc.Current)["Name"] "Wigo Haarbürsten" object {string}
this.dtaSrc.Find("Name","Wigo Haarbürsten") 'this.dtaSrc.Find("Name","Wigo Haarbürsten")' threw an exception of type 'System.ArgumentException' int {System.ArgumentException}
((DataRowView)this.dtaSrc.Current)["Product_ID"] {73cc139f-0c88-4838-b231-008752b90465} object {System.Guid}
this.dtaSrc.Find("Product_ID",new Guid("{73cc139f-0c88-4838-b231-008752b90465}")) 'this.dtaSrc.Find("Product_ID",new Guid("{73cc139f-0c88-4838-b231-008752b90465}"))' threw an exception of type 'System.ArgumentException' int {System.ArgumentException}
Jedes Mal, wenn ich die BindingSource.Find - Methode aufrufe, wird eine InvalidArgument Exception geworfen, in welcher steht, dass der PropertyName nicht exisitere, aber das macht doch überhaupt keinen Sinn, denn wenn ich schliesslich mit einem Assoziativen Listenzugriff auf genau jenes Element zugreife, bekomme ich anstandslos die entsprechende DataRowView?
Was soll denn das?
Lg Ishildur
Zu zwei. Hoppla habe ich nicht gewusst, aber OK, wenns proceted ist, dann kommts doch auf dasselbe raus, oder?
@Herbivore
ScrollToCaret habe ich bereits versucht, aber leider hatte das keinen Effekt, genausowenig wie DoubleBuffered, was ich ja auch nur an Objekte die von Control abgeleitet sind, definieren kann. Leider ist TextBox nicht von Control sondern von Component abgeleitet...
Hallo Leute
Ich benutze eine TextBox als Statusberichtsanzeige, ähnlich wie eine Konsole! Nun habe ich das Problem, dass natürlich mit der Zeit mehr Zeilen angezeigt werden, als in der TextBox platz haben. Ich habe zwar eine vertikale Scrollbar gesetzt, aber es wird nicht von alleine gescrollt. Kann ich irgendwie im Code sagen, er solle vielleicht mal scrollen?
Zweitens muss ich ja sehr oft in die TextBox reinschreiben, wodurch das Teil anfängt zu flackern. Kann ich dem nicht irgendwie einen Backbuffer zuweisen?
Gruss Ishildur
Naja, das ist mir schon klar, aber das würde doch speicher fressen ohne Ende, es geht um folgendes:
Ich habe vor einigen Tagen ein Konsolenprogramm geschrieben, welches eine Datenbankstruktur zu Testzwecken mit Schrott füllt. Dabei habe ich laufend den Status auf die Konsole geschrieben, was so ausgesehen hat:
**********************************************************************
* Copyright (C) 2005 Quasar GmbH *
**********************************************************************
* TopTrash *
* -------- *
* Ver. 1.0 beta *
**********************************************************************
Server: ISHILDUR\SQLEXPRESS
Datenbank: Tophair_Full-> Verbindung zu <<ISHILDUR\SQLEXPRESS>> wird hergestellt...
-> Konstantenarrays werden initialisiert: 100%
-> In der Datenbank vorhandene Datensätze werden entfernt 100%
-> Ländertabelle wird generiert 100%
-> Kategorientabelle wird generiert 100%
-> Herstellertabelle wird generiert 100%
-> Mitarbeitertabelle wird generiert 100%
-> Kundentabelle wird generiert 100%
-> Kontakte werden referenziert 100%
-> Produktetabelle wird generiert 100%
-> Dienstetabelle wird generiert 100%
-> Besuchstabelle wird generiert 100%
-> Produkte werden referenziert 042%
Nun möchte ich dasselbe einfach in eine mehrzeilige Textbox schreiben, aber da kann ich natürlich nicht mehr so einfach \b\b\b verwenden, um die letzten Zeichen wieder zu entfernen, daher frage ich, wie es dann geht?
Hallo zusammen.
Mit der operation += kann ich ja einem String einen weiteren Teilstring anhängen. Aber wie kann ich bspw. einfach am Ende des Strings 5 Zeichen entfernen?
Gruss Ishildur
@Herbivore
Scho passiert!! 😁
// create an array of textboxes to check
TextBox[] arrTbx = {
this.tbxPrs,this.tbxCnt,this.tbxSes,this.tbxPrc,this.tbxSrv,this.tbxPrd
};
// create an array of tablenames
String[] arrTbl = {
"Kunden","Kundenkontakte","Besuche","Verkäufe","Dienstreferenzen","Produktreferenzen"
};
// start a loop for walking each control
for(int i=0,c=arrTbx.Length;i<c;++i){
// check if the current textbox is empty
if(String.IsNullOrEmpty(arrTbx[i].Text)){
// create an error
String strErr = "Bitte definieren Sie, wieviele "+arrTbl[i]+" generiert werden sollen";
err = new Error(arrTbx[i],strErr);
}
// otherwise check if value of the current textbox couldn't be parsed
else if(!Int32.TryParse(arrTbx[i].Text,out arrNbr[i]))
// create an error
err = new Error(arrTbx[i],"Dies scheint keine gültige Zahl zu sein!");
}
@Herbivore
Hi herbivore, habs nun mit TryParse gemacht, gibt aber eben unnötig viel code:
// check if one of the values is invalid
if(String.IsNullOrEmpty(this.tbxPrs.Text)){
String strErr = "Bitte definieren Sie, wieviele Kunden generiert werden sollen";
err = new Error(this.tbxPrs,strErr);
}
else if(!Int32.TryParse(this.tbxPrs.Text,arrNbr)){
err = new Error(this.tbxPrs,"Dies scheint keine gültige Zahl zu sein!");
}
else if(String.IsNullOrEmpty(this.tbxCnt.Text)){
String strErr = "Bitte definieren Sie, wieviele Kundenkontakte generiert werden sollen";
err = new Error(this.tbxCnt,strErr);
}
else if(!Int32.TryParse(this.tbxCnt.Text,arrNbr)){
err = new Error(this.tbxCnt,"Dies scheint keine gültige Zahl zu sein!");
}
else if(String.IsNullOrEmpty(this.tbxSes.Text)){
String strErr = "Bitte definieren Sie, wieviele Besuche generiert werden sollen";
err = new Error(this.tbxSes,strErr);
}
else if(!Int32.TryParse(this.tbxSes.Text,arrNbr)){
err = new Error(this.tbxSes,"Dies scheint keine gültige Zahl zu sein!");
}
else if(String.IsNullOrEmpty(this.tbxPrc.Text)){
String strErr = "Bitte definieren Sie, wieviele Verkäufe generiert werden sollen";
err = new Error(this.tbxPrc,strErr);
}
else if(!Int32.TryParse(this.tbxPrc.Text,arrNbr)){
err = new Error(this.tbxPrc,"Dies scheint keine gültige Zahl zu sein!");
}
else if(String.IsNullOrEmpty(this.tbxSrv.Text)){
String strErr = "Bitte definieren Sie, wieviele Kunden generiert werden sollen";
err = new Error(this.tbxSrv,strErr);
}
else if(!Int32.TryParse(this.tbxPrs.Text,arrNbr)){
err = new Error(this.tbxSrv,"Dies scheint keine gültige Zahl zu sein!");
}
else if(String.IsNullOrEmpty(this.tbxPrd.Text)){
String strErr = "Bitte definieren Sie, wieviele Kunden generiert werden sollen";
err = new Error(this.tbxPrd,strErr);
}
else if(!Int32.TryParse(this.tbxPrd.Text,arrNbr)){
err = new Error(this.tbxPrd,"Dies scheint keine gültige Zahl zu sein!");
}
WOW das ging ja schnell!!! 😁
Also die Situation sieht folgendermassen aus:
int[] arrNbr = new int[6];
try {
arrNbr[0] = Int32.Parse(this.tbxPrs.Text);
arrNbr[1] = Int32.Parse(this.tbxCnt.Text);
arrNbr[2] = Int32.Parse(this.tbxSes.Text);
arrNbr[3] = Int32.Parse(this.tbxPrc.Text);
arrNbr[4] = Int32.Parse(this.tbxSrv.Text);
arrNbr[5] = Int32.Parse(this.tbxPrd.Text);
}
catch(ArgumentException exp){
this.HandleExcpetion((Control)exp.<???>);
}
Hallo liebe Community
Gibt es eigentlich eine Möglichkeit, im catch herauszufinden, welches object eine Exception ausgelöst hat? Währe echt hilfreich!
Gruss Ishildur
Hallo zusammen
Ich habe ein etwas merkwürdiges Problem:
Ich habe eine Konsolenapplikation geschrieben, welche eine Datenbankstruktur zu Testzwecken mit Junk-Daten füllt. Unter anderem auch mit Bilder, doch steht mir irgendwie das Assembly System.Drawing.Image nicht zur Verfügung. Was soll denn dass?
Ebenfalls kann ich keine Resourcendateien anlegen! Weiss jemand Rat? Die Bilder müssen unbedingt in die Datenbank!
Gruss Ishildur
Hallo zusammen, gibts irgendeine Funktion, um bei Konvertieren von Zahlen in Strings eine konstante Länge anzugeben? Ich möchte bspw. dass aus einem 1 ein 001 und aus einem 10 ein 010 wird, geht das irgendwie?
Ich habs zwar schnell selbst geschrieben, aber eine vorgefertigte Funktion wäre dennoch eleganter...
StringBuilder str = new StringBuilder();
for(int i=0,c=3-Percent.ToString().Length;i<c;++i) str.Append('0');
str.Append(Percent.ToString());
Console.Write(str.ToString());
Gruss Ishildur
Hier noch der Zustand der betreffenden Objekte zum Zeitpunkt der Exception:
dtaTblPrs.Rows[0][0] {dbac0015-7a61-496f-a7e3-837164ee616d} object {System.Guid}
dtaTblPrs.Rows[0][1] {99cf4512-8aad-4b8b-990d-eb7d3fedd39f} object {System.Guid}
dtaTblPrs.Rows[0][2] {46cc57e0-6443-4df0-b888-71088f622f37} object {System.Guid}
dtaTblPrs.Rows[0][3] 0 object {byte}
dtaTblPrs.Rows[0][4] "Erika" object {string}
dtaTblPrs.Rows[0][5] "Friedli" object {string}
dtaTblPrs.Rows[0][6] {08.08.2006 00:00:00} object {System.DateTime}
dtaTblPrs.Rows[0][7] 0 object {byte}
dtaTblPrs.Rows[0][8] "Programmierer" object {string}
dtaTblPrs.Rows[0][9] "941.81.385.258" object {string}
dtaTblPrs.Rows[0][10] "Schwenistutz 258" object {string}
dtaTblPrs.Rows[0][11] "6674" object {string}
dtaTblPrs.Rows[0][12] "Langnau" object {string}
dtaTblPrs.Rows[0][13] {} object {System.DBNull}
dtaTblPrs.Rows[0][14] {} object {System.DBNull}
dtaTblPrs.Rows[0][15] {} object {System.DBNull}
dtaTblPrs.Rows[0][16] 0 object {byte}
sqlCmd.Parameters[0].SqlDbType UniqueIdentifier System.Data.SqlDbType
sqlCmd.Parameters[1].SqlDbType UniqueIdentifier System.Data.SqlDbType
sqlCmd.Parameters[2].SqlDbType UniqueIdentifier System.Data.SqlDbType
sqlCmd.Parameters[3].SqlDbType TinyInt System.Data.SqlDbType
sqlCmd.Parameters[4].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[5].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[6].SqlDbType DateTime System.Data.SqlDbType
sqlCmd.Parameters[7].SqlDbType TinyInt System.Data.SqlDbType
sqlCmd.Parameters[8].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[9].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[10].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[11].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[12].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[13].SqlDbType VarChar System.Data.SqlDbType
sqlCmd.Parameters[14].SqlDbType Text System.Data.SqlDbType
sqlCmd.Parameters[15].SqlDbType Image System.Data.SqlDbType
sqlCmd.Parameters[16].SqlDbType Bit System.Data.SqlDbType
dtaTblPrs.Rows.Count 1 int
Exception:
Failed to convert parameter value from a Guid to a String.
Scheisse noch mal, wo ist da wohl eine verfiggte Konvertierung von Guid nach String??? Hää?? Der hat doch einen an der Waffel!!! 😜
@nitronic
Nein, der Fehler passiert, wenn ich die Update Methode des entsprechenden Adapters aufrufe. Da die Daten ja scheinbar ordnungsgemäss von den Controls via Databindings in die DataTable gelangte, muss der Fehler ja daran liegen, dass in der DataTable und den Parameter des Insert - Commands des DataAdapter unterschiedliche Typen definiert sind. Ich habe diese aber tausendmal geprüft:
Der Insert - Command des Personenadapters
// create and assign the insert - command
strCmd = "INSERT INTO Person(Person_ID,Country_ID,Nationality_ID,Title,PersonalName,";
strCmd += "FamilyName,Birthdate,Civilstate,Profession,AHV,Adress,Zip,Place,Postcase,";
strCmd += "Description,Picture,News,Inserted,Locked) VALUES(@Person_ID,@Country_ID,";
strCmd += "@Nationality_ID,@Title,@PersonalName,@FamilyName,@Birthdate,@Civilstate,";
strCmd += "@Profession,@AHV,@Adress,@Zip,@Place,@Postcase,@Description,@Picture,@News,";
strCmd += "GETDATE(),0)";
sqlCmd = new SqlCommand(strCmd,this.Connection);
sqlCmd.Parameters.Add("Person_ID",SqlDbType.UniqueIdentifier,0,"Person_ID");
sqlCmd.Parameters.Add("Country_ID",SqlDbType.UniqueIdentifier,0,"Country_ID");
sqlCmd.Parameters.Add("Nationality_ID",SqlDbType.UniqueIdentifier,0,"Nationality_ID");
sqlCmd.Parameters.Add("Title",SqlDbType.TinyInt,0,"Title");
sqlCmd.Parameters.Add("PersonalName",SqlDbType.VarChar,20,"PersonalName");
sqlCmd.Parameters.Add("FamilyName",SqlDbType.VarChar,20,"FamilyName");
sqlCmd.Parameters.Add("Birthdate",SqlDbType.DateTime,0,"Birthdate");
sqlCmd.Parameters.Add("Civilstate",SqlDbType.TinyInt,0,"Civilstate");
sqlCmd.Parameters.Add("Profession",SqlDbType.VarChar,50,"Country_ID");
sqlCmd.Parameters.Add("AHV",SqlDbType.VarChar,20,"AHV");
sqlCmd.Parameters.Add("Adress",SqlDbType.VarChar,50,"Adress");
sqlCmd.Parameters.Add("Zip",SqlDbType.VarChar,10,"Zip");
sqlCmd.Parameters.Add("Place",SqlDbType.VarChar,50,"Place");
sqlCmd.Parameters.Add("Postcase",SqlDbType.VarChar,50,"Postcase");
sqlCmd.Parameters.Add("Description",SqlDbType.Text,0,"Description");
sqlCmd.Parameters.Add("Picture",SqlDbType.Image,50,"Picture");
sqlCmd.Parameters.Add("News",SqlDbType.Bit,0,"News");
this.sqlAdpPrs.InsertCommand = sqlCmd;
Die Personentabelle
// create and setup the person - table
this.dtaTblPrs = this.DataSet.Tables.Add("Person");
this.dtaTblPrs.Columns.Add("Person_ID",typeof(Guid));
this.dtaTblPrs.Columns.Add("Country_ID",typeof(Guid));
this.dtaTblPrs.Columns.Add("Nationality_ID",typeof(Guid));
this.dtaTblPrs.Columns.Add("Title",typeof(Byte));
this.dtaTblPrs.Columns.Add("PersonalName",typeof(String));
this.dtaTblPrs.Columns.Add("FamilyName",typeof(String));
this.dtaTblPrs.Columns.Add("Birthdate",typeof(DateTime));
this.dtaTblPrs.Columns.Add("Age",typeof(Int16));
this.dtaTblPrs.Columns.Add("Civilstate",typeof(Byte));
this.dtaTblPrs.Columns.Add("Profession",typeof(String));
this.dtaTblPrs.Columns.Add("AHV",typeof(String));
this.dtaTblPrs.Columns.Add("Adress",typeof(String));
this.dtaTblPrs.Columns.Add("Zip",typeof(String));
this.dtaTblPrs.Columns.Add("Place",typeof(String));
this.dtaTblPrs.Columns.Add("Postcase",typeof(String));
this.dtaTblPrs.Columns.Add("Description",typeof(String));
this.dtaTblPrs.Columns.Add("Picture",typeof(Byte[]));
this.dtaTblPrs.Columns.Add("News",typeof(Byte));
this.dtaTblPrs.Columns["News"].DefaultValue = false;
this.dtaTblPrs.Constraints.Add(null,this.dtaTblPrs.Columns["Person_ID"],true);
Lg Ishildur
Einen schönen guten Abend allerseits! Ich habe folgende Exceptionmeldung, wenn ich SqlDataAdapter.Update aufrufe und kann absolut nichts damit anfangen! Ich habe sämtliche Parameter des SqlDataAdapters mit den zugehörigen Spalten in der DataTable verglichen und es ist bestimmt nirgends eine solche Konvertierung erforderlich!
Bin bereits mehr als eine Stunde versucht, das Problem zu lokalisieren, jedoch ohne Erfolg!
Lg Ishildur
Hallo zusammen
Wie kann ich feststellen, wenn sich die DataRowVersion einer DataRow verändert hat, gibts da eine Möglichkeit?
Greetz Ishildur
Hallo zusammen, ich habe ein recht seltsames Problem mit Databindings, und zwar habe ich folgenden Code
// assign the needed data - bindings
DataSourceUpdateMode mdo = DataSourceUpdateMode.OnPropertyChanged;
this.tbxID.DataBindings.Add("Text",this.EditSource,"Session_ID",false,mdo);
this.tbxPrcClc.DataBindings.Ad("Text",this.EditSource,"CalculatedPrice",false,mdo);
this.tbxPrcEff.DataBindings.Add("Text",this.EditSource,"EffectivePrice",false,mdo);
Wobei this.EditSource ein BindingSource repräsentiert!
Dies funktioniert auch allerbestens, doch wenn ich nun die Zeile
this.dtpDat.DataBindings.Add("Value",this.EditSource,"SessionDate",false,mdo);
hinzufüge, dann geht plötzlich gar nichts mehr! Es erscheint zwar keine Fehlermeldung und es wird auch keine Exception geworfen, allerdings wird der Komplette Datensatz nicht in die Controls geschrieben...
Hat jemand eine Idee, woran dies liegen könnte?
Lg Ishildur
Hallo zusammen, ich möchte meine DatagridViews optische etwas aufpolieren und möchte zu diesem Zweck jede zweite Zeile etwas dunkler zeichnen. Kann man dies irgendwie bewerkstelligen?
Gruss Ishildur
@Traumzauberbaum
Perfekt! Danke vielmals!!! 😁 😁 😁
@burning snow
Jaja, die Sache mit dem Selberbasteln
// create and setup the sql - adapter
String strCmd = "";
foreach(DataColumn col in DataTable.Columns) strCmd += col.ColumnName+',';
strCmd = strCmd.Remove(strCmd.Length-1,1);
strCmd = "SELECT "+strCmd+" FROM "+DataTable.TableName;
this.sqlAdp = new SqlDataAdapter(strCmd,Connection);
Ist doch viel schöner und übersichtlicher?
// create and setup the sql - adapter;
String[] arrCol = new String[DataTable.Columns.Count];
for(int i=0,c=DataTable.Columns.Count;i<c;++i) arrCol[i] = DataTable.Columns[i].ColumnName;
strCmd = "SELECT "+String.Join(",",arrCol)+" FROM "+DataTable.TableName;
this.sqlAdp = new SqlDataAdapter(strCmd,Connection);
Hallo zusammen
Ich habe ein try mit meheren catch - blöcken, in welchen aber allesamt derselbe Code ausgeführt wird. Meine Frage ist nun, ob es da eine Möglichkeit gibt, für mehrere Exceptiontypen denselben catchblock zu verwenden oder eine Art Fallthrougt Technik...
Lg Ishildur
Hallo zusammen
In PHP gibts so ne wunderschöne funktion mit dem Namen implode, mit dessen Hilfe ich ein String Array in einen einzelnen String zusammenführen kann und dabei noch ein Zeichen definieren kann, welches zwischen jedes Element hineingefügt wird. Gibs sowas auch in C#? Währe echt mega cool!
Hallo zusammen
Weiss jemand von euch, wie ich den SelectedValue eines Combobox - Items bereitsstellen kann? Also den Text kann ich bereitsstellen, indem ich eine Klasse von object ableite und anschliessend ToString() überschreibe, aber wie geht das mit dem SelectedValue?
Lg Ishildur
Einen guten morgen alle zusammen
Ich habe eine kleine Frage:
Wie kann ich herausfinden, ob sich der Wert einer DataRowView seit dem letzten EndEdit geändert hat?
Lg Ishildur
P.S.
IsEdit funktioniert leider nicht, da dieses generell immer True zurückgibt, ausser unmittelbar nach EndEdit. Allerdings muss ich nur die Position ändern und schon haben wir wieder True;
RowVersion funktioniert leider auch nicht, da immer auf Current
Ein weiteres sehr bedenkliches Beispiel:
// ############################ declaration of all needed assemblys ###########################
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
// ############################################################################################
// #################################### namespace Research ####################################
namespace Research3 {
// *************************************** class Form1 ***************************************
public partial class Form1:Form {
// ------------------------------------- dynamic members ------------------------------------
private DataSet dtaSet = null;
private DataTable dtaTbl = null;
private BindingSource dtaSrc = null;
// ------------------------------------------------------------------------------------------
// ---------------------------------- default - constructor ---------------------------------
public Form1() {
// call a method for initializeing all components
this.InitializeComponent();
// instantiate a new dataset
this.dtaSet = new DataSet();
// instantiate and setup a new datatable
this.dtaTbl = dtaSet.Tables.Add("Product");
dtaTbl.Columns.Add("Product_ID",typeof(Guid));
dtaTbl.Columns.Add("Name",typeof(String));
dtaTbl.Constraints.Add("C1",dtaTbl.Columns[0],true);
// instantiate and setup a new sql connection
SqlConnectionStringBuilder strSql = new SqlConnectionStringBuilder();
strSql.DataSource = "192.168.1.2";
strSql.InitialCatalog = "TopHair";
strSql.IntegratedSecurity = false;
strSql.UserID = "<hmmmmmmm>";
strSql.Password = "<hmmmmmm>";
SqlConnection sqlCon = new SqlConnection(strSql.ToString());
// instantiate a new sql dataadapter and fill the dataset
SqlDataAdapter sqlAdp = new SqlDataAdapter("SELECT Product_ID,Name FROM Product",sqlCon);
sqlAdp.Fill(this.dtaSet.Tables[0]);
// instantiate a new BindingSource
this.dtaSrc = new BindingSource(dtaSet,"Product");
// why the FUCKING HELL ist this flag now set to true, I just filled in the rows, I really
// didn't edit them!!!!!
bool bEdt = ((DataRowView)this.dtaSrc.Current).IsEdit;
}
// ------------------------------------------------------------------------------------------
}
// *******************************************************************************************
}
// ############################################################################################
Mir ist noch etwas aufgefallen: Wenn ich den Inhalt einer TextBox im Formular eingebe, dann wird dieser anhand des DataBindings ins DataRowView geschrieben, mache ichs aber Programmatisch: TextBox.Text = "Hallo"; dann muss ich noch CurrencyManager aufrufen, damit die Änderungen übernommen werden. Weiss jemand, woran das liegt, ist doch sehr eigenartig?
Lg Ishildur
@7.e.Q
tritt das Event erst auf, nachdem ich den Fokus der entsprechenden TextBox verlassen habe.
Also das kann ich dir sagen: Weil DataSourceUpdateMode standardmässig auf OnValidation steht und Validation wird aufgerufen, sobald ein Control den Fokus verliert. Falls Control.Validation auf false gesetzt ist, werden die Daten leider gar nie übernommen. Man muss dann BindingSource.WriteValue manuell aufrufen. Schade, dass solche Sachen nicht in der Doku beschrieben sind. Die WinAPI hatte IMHO eine sehr gute Doku während die Doku des .NET eine Frechheit ist. Viele Dinge werden mit 4 - 5 Wörter beschrieben!
Bspw. MoveNext() : Moves to the next item in the list.
Das MoveNext allerdings auch noch die DataRow in den EditMode setzt, haben Sie leider vergessen zu schreiben! 😜
Ein weiteres tiefschürfendes Minibeispiel:
// ############################ declaration of all needed assemblys ###########################
using System;
using System.Data;
using System.Windows.Forms;
// ############################################################################################
// #################################### namespace Research ####################################
namespace Research3 {
// *************************************** class Form1 ***************************************
public partial class Form1:Form {
// ------------------------------------- dynamic members ------------------------------------
private DataSet dtaSet = null;
private DataTable dtaTbl = null;
private BindingSource dtaSrc = null;
// ------------------------------------------------------------------------------------------
// ---------------------------------- default - constructor ---------------------------------
public Form1() {
// call a method for initializeing all components
this.InitializeComponent();
// instantiate a new dataset
this.dtaSet = new DataSet();
// instantiate and setup a new datatable
this.dtaTbl = dtaSet.Tables.Add("Product");
dtaTbl.Columns.Add("Product_ID",typeof(Guid));
dtaTbl.Columns.Add("Name",typeof(String));
dtaTbl.Constraints.Add("C1",dtaTbl.Columns[0],true);
// add a new row to the datatable
for(int i=0;i<2;++i){
DataRow row = dtaTbl.NewRow();
row["Product_ID"] = Guid.NewGuid();
dtaTbl.Rows.Add(row);
}
// instantiate a new BindingSource
this.dtaSrc = new BindingSource(dtaSet,"Product");
// end any pending operation and move to the next record (the 2nd one)
this.dtaSrc.EndEdit();
this.dtaSrc.MoveNext();
// why the FUCKING HELL is this flag now set to true, I just called EndEdit and then just
// moved to the next record without touching him ???????
bool bEdt = ((DataRowView)this.dtaSrc.Current).IsEdit;
// now we really edit something
((DataRowView)this.dtaSrc.Current)["Name"] = "Test";
// why the FUCKING HELL is this flag now set to "Current" instead of "proposed" ???
// Now I touched it and IsEdit is sadly always set to true, so how my dear God may
// I notice, if there were any changes since the last saveing action,
// because I don't want to ask the user anytime he moves to another record,
// if he likes to save, independent if there were any changes!!!!!
DataRowVersion ver = ((DataRowView)this.dtaSrc.Current).RowVersion;
}
// ------------------------------------------------------------------------------------------
}
// *******************************************************************************************
}
// ############################################################################################
Also biiiiiiite, biiiiiite liebe C# Community, bitte Helft mir und sagt mir, dass ich einfach nur Tomaten auf den Augen habe, denn ansonsten kann ich mir schon mal einen neuen Job suchen! Ich war es nämlich, der C# für dieses Projekt durchgesetzt hat. Und zu diesem Zeitpunkt kann ich nicht mehr auf JAVA oder Delphi umsteigen, sonst müsste ich nochmals ganz von Vorne anfangen...
PLLLLLLLEEEEEEAAAAASEEEEE!!!!
Lg Ishildur
Folgendes mini Beispiel zeigt nun leider Zweifelsohne, dass CurrentItemChanged nicht aufgerufen wird...
// ############################ declaration of all needed assemblys ###########################
using System;
using System.Data;
using System.Windows.Forms;
// ############################################################################################
// #################################### namespace Research ####################################
namespace Research2 {
// *************************************** class Form1 ***************************************
public partial class Form1:Form {
// ------------------------------------- dynamic members ------------------------------------
private DataSet dtaSet = null;
private DataTable dtaTbl = null;
private BindingSource dtaSrc = null;
// ------------------------------------------------------------------------------------------
// ---------------------------------- default - constructor ---------------------------------
public Form1() {
// call a method for initializeing all components
this.InitializeComponent();
// instantiate a new dataset
this.dtaSet = new DataSet();
// instantiate and setup a new datatable
this.dtaTbl = dtaSet.Tables.Add("Product");
dtaTbl.Columns.Add("Product_ID",typeof(Guid));
dtaTbl.Columns.Add("Name",typeof(String));
dtaTbl.Constraints.Add("C1",dtaTbl.Columns[0],true);
// add a new row to the datatable
DataRow row = dtaTbl.NewRow();
row["Product_ID"] = Guid.NewGuid();
dtaTbl.Rows.Add(row);
// instantiate and setup a new BindingSource
this.dtaSrc = new BindingSource(dtaSet,"Product");
this.dtaSrc.CurrentItemChanged += new EventHandler(dtaSrc_CurrentItemChanged);
// change a property of the current item
((DataRowView)this.dtaSrc.Current)["Name"] = "Test";
// nothing happens, the event was not called, tested with breakpoint
}
// ------------------------------------------------------------------------------------------
// ----------------- event handler for the event "dtaSrc_CurrentItemChanged" ----------------
private void dtaSrc_CurrentItemChanged(object sender,EventArgs e) {
// this code will never be executed
this.labOut.Text = "CurrentItemChanged wurde aufgerufen";
}
// ------------------------------------------------------------------------------------------
}
// *******************************************************************************************
}
// ############################################################################################
@-acid-
Hast du denn schon mal diese Dinge an einem neuen einfachen Beispiel ausporbiert?
Der gepostete Code ist das einfache Beispiel, das ich heute morgen schnell, schnell geschrieben habe. Das richtige Projekt umfasst 10'000nde von Codezeilen...
CurrentItemChanged funktioniert aber leider einmal mehr nur dann, wenn CurrencyManager.Refresh manuell aufgerufen wird!
Das Zip habe ich erstellt und in den Anhang geworfen
@purestrain
nd ich liege auch nie monate hinter dem release zurueck
Jaja, lach du nur, glaubst du etwa, ich finde das witzig?
Hallo zusammen.
Als erstes möchte ich mich für den Titel entschuldigen, aber etwas Anderes fiel mir wirklich nicht mehr ein: Nachdem ich nun Wochenlang mit meinem Programm gekämpft habe und nun bereits Monate hinter dem geplanten Release stehe, (Was mir weder mit Delphi noch mit Java jemals passierte) habe ich nun ein kleines Miniprogrämmchen geschrieben, um die Verhaltensweise des BindingSource zu analysieren, und was ich dabei entdecken musste, liess mich erschaudern! 8o -> Oder aber ich bin einfach zu blöde!!! X(
Nun wie dem auch sei, den folgenden Sourcecode sollte jeder auf seinem Rechner kompillieren und ausführen können:
Folgende Sachen sind mir aufgefallen:
Hinweis: Alle Databindings wurden mit DataSourceUpdateMode.OnPropertyChanged erzeugt. Ändere ich nun den Text einer Textbox, welche mit DataBindings an ein BindingSource geknüpft ist, dann passiert einfach gar nichts! Die DataRowVersion ändert sich nicht und der CurrentItemChanged Event wird auch nicht aufgerufen...
Wie gesagt, vielleicht bin ich einfach zu blöde, oder vielleicht ist das noch nie jemandem aufgefallen, dann muss ch mich aber ernsthaft fragen, was für Software ihr eigentlich entwickelt... ?( ?( ?(
// ############################ declaration of all needed assemblys ###########################
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
// ############################################################################################
// #################################### namespace Research ####################################
namespace Research {
// *************************************** class Form1 ***************************************
public partial class Form1:Form {
// ------------------------------------- dynamic members ------------------------------------
private DataSet dtaSet = null;
private DataTable dtaTbl = null;
private BindingSource dtaSrc = null;
private int numEvt = 0;
// ------------------------------------------------------------------------------------------
// ---------------------------------- default - constructor ---------------------------------
public Form1() {
// call a method for initializeing all components
this.InitializeComponent();
// instantiate a new dataset
this.dtaSet = new DataSet();
// instantiate and setup a new datatable
this.dtaTbl = dtaSet.Tables.Add("Product");
dtaTbl.Columns.Add("Product_ID",typeof(Guid));
dtaTbl.Columns.Add("Name",typeof(String));
dtaTbl.Constraints.Add("C1",dtaTbl.Columns[0],true);
// instantiate and setup a new BindingSource
this.dtaSrc = new BindingSource(dtaSet,"Product");
this.dtaSrc.CurrentItemChanged += new EventHandler(dtaSrc_CurrentItemChanged);
// assign all needed databindings
DataSourceUpdateMode mdo = DataSourceUpdateMode.OnPropertyChanged;
this.tbxPrdID.DataBindings.Add("Text",this.dtaSrc,"Product_ID",false,mdo);
this.tbxNme.DataBindings.Add("Text",this.dtaSrc,"Name",false,mdo);
}
// ------------------------------------------------------------------------------------------
// ------------------------ method for displaying status information ------------------------
private void DisplayStatusInformation(){
// display the number of records and the position of the current record
this.labNum.Text = "Number of Records = "+this.dtaSrc.Count.ToString();
this.labCur.Text = "Position = "+this.dtaSrc.Position.ToString();
// retreive the current datarowview
DataRowView row = (DataRowView)this.dtaSrc.Current;
// check if the last operation succeeded
if(row != null) {
// display the status of the flags isNew and isEdit of the current record
this.labNew.Text = "IsNew = "+(row.IsNew ? "true" : "false");
this.labEdt.Text = "IsEdit = "+(row.IsEdit ? "true" : "false");
this.labPrp.Text = "Proposed = "+row.RowVersion.ToString();
}
}
// ------------------------------------------------------------------------------------------
// ----------------------- event handler for the event "btnPrv_Click" -----------------------
private void btnPrv_Click(object sender,EventArgs e) {
// call the method for moveing to the previous record and display status information
this.dtaSrc.MovePrevious();
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
// ----------------------- event handler for the event "btnNxt_Click" -----------------------
private void btnNxt_Click(object sender,EventArgs e) {
// call the method for moveing to the next record and display status information
this.dtaSrc.MoveNext();
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
// ----------------------- event handler for the event "btnAdd_Click" -----------------------
private void btnAdd_Click(object sender,EventArgs e) {
// create, setup and add a new DataRowView to the bindingsource
DataRowView row = (DataRowView)this.dtaSrc.AddNew();
row["Product_ID"] = Guid.NewGuid();
String[] arrNme = { "Vichy","Fructis","Schwarzkopf","Garnier","Visual" };
row["Name"] = arrNme[new Random().Next(arrNme.Length)];
// call the refresh method of the currency - manager if the concerning flag was set
if(this.chbRfs.Checked) this.dtaSrc.CurrencyManager.Refresh();
// display status information
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
// ---------------------- event handler for the event "btnAddTbl_Click" ---------------------
private void btnDel_Click(object sender,EventArgs e) {
// call the method for deleting the current record and display status information
this.dtaSrc.RemoveCurrent();
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
// ---------------------- event handler for the event "btnAddTbl_Click" ---------------------
private void btnAddTbl_Click(object sender,EventArgs e) {
// create, setup and add a new DataRow to the datatable
DataRow row = this.dtaTbl.NewRow();
row["Product_ID"] = Guid.NewGuid();
this.dtaTbl.Rows.Add(row);
String[] arrNme = { "Vichy","Fructis","Schwarzkopf","Garnier","Visual" };
row["Name"] = arrNme[new Random().Next(arrNme.Length)];
// display status information
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
// ----------------- event handler for the event "dtaSrc_CurrentItemChanged" ----------------
private void dtaSrc_CurrentItemChanged(object sender,EventArgs e) {
this.labEvt.Text = "BindingSource.CurrentItemChanged = "+(++this.numEvt).ToString();
}
// ------------------------------------------------------------------------------------------
// ---------------------- event handler for the event "btnAddTbl_Click" ---------------------
private void tbxNme_TextChanged(object sender,EventArgs e) {
// diplay status information
this.DisplayStatusInformation();
}
// ------------------------------------------------------------------------------------------
}
// *******************************************************************************************
}
// ############################################################################################
namespace Research {
partial class Form1 {
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.btnNxt = new System.Windows.Forms.Button();
this.btnAdd = new System.Windows.Forms.Button();
this.btnPrv = new System.Windows.Forms.Button();
this.labEdt = new System.Windows.Forms.Label();
this.btnDel = new System.Windows.Forms.Button();
this.labNum = new System.Windows.Forms.Label();
this.labCur = new System.Windows.Forms.Label();
this.labNew = new System.Windows.Forms.Label();
this.chbRfs = new System.Windows.Forms.CheckBox();
this.btnAddTbl = new System.Windows.Forms.Button();
this.labPrp = new System.Windows.Forms.Label();
this.tbxPrdID = new System.Windows.Forms.TextBox();
this.tbxNme = new System.Windows.Forms.TextBox();
this.labEvt = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// btnNxt
//
this.btnNxt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnNxt.Location = new System.Drawing.Point(12,251);
this.btnNxt.Name = "btnNxt";
this.btnNxt.Size = new System.Drawing.Size(134,23);
this.btnNxt.TabIndex = 0;
this.btnNxt.Text = "BindingSource.Next";
this.btnNxt.UseVisualStyleBackColor = true;
this.btnNxt.Click += new System.EventHandler(this.btnNxt_Click);
//
// btnAdd
//
this.btnAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnAdd.Location = new System.Drawing.Point(12,280);
this.btnAdd.Name = "btnAdd";
this.btnAdd.Size = new System.Drawing.Size(134,23);
this.btnAdd.TabIndex = 1;
this.btnAdd.Text = "BindingSurce.Add";
this.btnAdd.UseVisualStyleBackColor = true;
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
//
// btnPrv
//
this.btnPrv.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnPrv.Location = new System.Drawing.Point(12,222);
this.btnPrv.Name = "btnPrv";
this.btnPrv.Size = new System.Drawing.Size(134,23);
this.btnPrv.TabIndex = 2;
this.btnPrv.Text = "BindingSource.Previous";
this.btnPrv.UseVisualStyleBackColor = true;
this.btnPrv.Click += new System.EventHandler(this.btnPrv_Click);
//
// labEdt
//
this.labEdt.AutoSize = true;
this.labEdt.Location = new System.Drawing.Point(13,147);
this.labEdt.Name = "labEdt";
this.labEdt.Size = new System.Drawing.Size(37,13);
this.labEdt.TabIndex = 3;
this.labEdt.Text = "labEdt";
//
// btnDel
//
this.btnDel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnDel.Location = new System.Drawing.Point(12,309);
this.btnDel.Name = "btnDel";
this.btnDel.Size = new System.Drawing.Size(134,23);
this.btnDel.TabIndex = 7;
this.btnDel.Text = "BindingSource.Remove";
this.btnDel.UseVisualStyleBackColor = true;
this.btnDel.Click += new System.EventHandler(this.btnDel_Click);
//
// labNum
//
this.labNum.AutoSize = true;
this.labNum.Location = new System.Drawing.Point(13,58);
this.labNum.Name = "labNum";
this.labNum.Size = new System.Drawing.Size(43,13);
this.labNum.TabIndex = 8;
this.labNum.Text = "labNum";
//
// labCur
//
this.labCur.AutoSize = true;
this.labCur.Location = new System.Drawing.Point(12,78);
this.labCur.Name = "labCur";
this.labCur.Size = new System.Drawing.Size(37,13);
this.labCur.TabIndex = 9;
this.labCur.Text = "labCur";
//
// labNew
//
this.labNew.AutoSize = true;
this.labNew.Location = new System.Drawing.Point(13,124);
this.labNew.Name = "labNew";
this.labNew.Size = new System.Drawing.Size(43,13);
this.labNew.TabIndex = 10;
this.labNew.Text = "labNew";
//
// chbRfs
//
this.chbRfs.AutoSize = true;
this.chbRfs.Location = new System.Drawing.Point(12,196);
this.chbRfs.Name = "chbRfs";
this.chbRfs.Size = new System.Drawing.Size(309,17);
this.chbRfs.TabIndex = 11;
this.chbRfs.Text = "call CurrencyManager.Refresh after BindingSource.AddNew";
this.chbRfs.UseVisualStyleBackColor = true;
//
// btnAddTbl
//
this.btnAddTbl.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnAddTbl.Location = new System.Drawing.Point(152,280);
this.btnAddTbl.Name = "btnAddTbl";
this.btnAddTbl.Size = new System.Drawing.Size(94,23);
this.btnAddTbl.TabIndex = 12;
this.btnAddTbl.Text = "DataTable.Add";
this.btnAddTbl.UseVisualStyleBackColor = true;
this.btnAddTbl.Click += new System.EventHandler(this.btnAddTbl_Click);
//
// labPrp
//
this.labPrp.AutoSize = true;
this.labPrp.Location = new System.Drawing.Point(13,169);
this.labPrp.Name = "labPrp";
this.labPrp.Size = new System.Drawing.Size(37,13);
this.labPrp.TabIndex = 13;
this.labPrp.Text = "labPrp";
//
// tbxPrdID
//
this.tbxPrdID.Location = new System.Drawing.Point(12,10);
this.tbxPrdID.Name = "tbxPrdID";
this.tbxPrdID.Size = new System.Drawing.Size(100,20);
this.tbxPrdID.TabIndex = 14;
//
// tbxNme
//
this.tbxNme.Location = new System.Drawing.Point(12,35);
this.tbxNme.Name = "tbxNme";
this.tbxNme.Size = new System.Drawing.Size(100,20);
this.tbxNme.TabIndex = 15;
this.tbxNme.TextChanged += new System.EventHandler(this.tbxNme_TextChanged);
//
// labEvt
//
this.labEvt.AutoSize = true;
this.labEvt.Location = new System.Drawing.Point(13,102);
this.labEvt.Name = "labEvt";
this.labEvt.Size = new System.Drawing.Size(37,13);
this.labEvt.TabIndex = 16;
this.labEvt.Text = "labEvt";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F,13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(512,344);
this.Controls.Add(this.labEvt);
this.Controls.Add(this.tbxNme);
this.Controls.Add(this.tbxPrdID);
this.Controls.Add(this.labPrp);
this.Controls.Add(this.btnAddTbl);
this.Controls.Add(this.chbRfs);
this.Controls.Add(this.labNew);
this.Controls.Add(this.labCur);
this.Controls.Add(this.labNum);
this.Controls.Add(this.btnDel);
this.Controls.Add(this.labEdt);
this.Controls.Add(this.btnPrv);
this.Controls.Add(this.btnAdd);
this.Controls.Add(this.btnNxt);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnNxt;
private System.Windows.Forms.Button btnAdd;
private System.Windows.Forms.Button btnPrv;
private System.Windows.Forms.Label labEdt;
private System.Windows.Forms.Button btnDel;
private System.Windows.Forms.Label labNum;
private System.Windows.Forms.Label labCur;
private System.Windows.Forms.Label labNew;
private System.Windows.Forms.CheckBox chbRfs;
private System.Windows.Forms.Button btnAddTbl;
private System.Windows.Forms.Label labPrp;
private System.Windows.Forms.TextBox tbxPrdID;
private System.Windows.Forms.TextBox tbxNme;
private System.Windows.Forms.Label labEvt;
}
}
Erst mal vielen Dank für euro Zeit! Ich habe jetzt Decimal verwendet anstatt SmallMoney, dann klappt alles wunderbar!
Sagt mal, habt ihr wirklich keine Ahnung oder antwortet ihr mir einfach aus Prinzip nicht?
Hallo zusammen
Wenn ich in einer TSQL Datenbank einen Smallmoney Datentyp in einer Tabelle verwende, dann hat dieser anscheinen standardmässig folgende Eigenschaften: Länge: 10, Nachkommastellen: 4
Ich möchte dies aber nun auf folgende Werte ändern: 6,2 wie mache ich denn dies?
ALTER TABLE Product ALTER COLUMN Price SMALLMONEY(6,2) NOT NULL, hat leider nicht funktioniert...
Lg Ishildur
So sieht das Ganze aus:
this.dtaViw.IsCurrentCellDirty false bool
this.dtaViw.CurrentCell.OwningRow.IsNewRow false bool
this.dtaViw.Rows.Count 8 int
nach BindingSource.AddNew():
this.dtaViw.IsCurrentCellDirty false bool
this.dtaViw.CurrentCell.OwningRow.IsNewRow false bool
this.dtaViw.Rows.Count 9 int
Die Anzahl Datensätze hat sich um eins erhöht, aber die letzte Zeile ist einfach nicht IsNewRow!
MSDN2
Eigenschaftenwert
true, wenn die Zeile die letzte Zeile in der DataGridView darstellt, die für die Eingabe einer neuen Datenzeile verwendet wird, andernfalls false.
HinweiseDa sich die Zeile für neue Datensätze in der Rows-Auflistung befindet, können Sie mithilfe der IsNewRow-Eigenschaft bestimmen, ob eine Zeile die Zeile für neue Datensätze oder eine aufgefüllte Zeile darstellt.
Schön wärs... 😜
Habs nun folgendermassen versucht:
// ------------------ method for determining if the current record is dirty -----------------
protected override bool IsRecordDirty() {
// return wether the current cell is in edit - mode
return this.dtaViw.CurrentCell.OwningRow.IsNewRow || this.dtaViw.IsCurrentCellDirty;
}
// ------------------------------------------------------------------------------------------
Funktioniert leider auch nicht, gibt beides false zurück, obwohl, die Zelle gerade erst neu erzeugt wurde! Das ist einfach zum Wahnsinnig werden!!!
Musste gerade für zwei Wochen ein anderes Projekt in Java machen, da hatte ich keine solche Probleme!!!
Hallo zusammen
In meiner Applikation benutze ich IsCurrentCellDirty, um zu überprüfen, ob die Zelle unbestätigte Änderungen beinhaltet. Das funktioniert auch ganz gut, ausser wenn ich eine neue Zeile zum DataGridView hinzufüge, dann gibt das IsCurrentCellDirty Property der neuen Zelle einfach false zurück, was soll denn das, ist das ein Bug?
Lg Ishildur
@Noodless
Kannst du mir bitte sagen, wie ich den DataSourceUpdateMode einer DataGridView verändern kann? Das ist echt mega wichtig!
Lg Ishildur
Hallo zusammen
Ich möchte folgendes machen:
List<object> lst = new List<object>;
for(int i=0,c=lst.Count;i<c;++i){
for(int k=i;k<c;++k){
if(lst[i] == lst[k]) DoSomething();
}
}
Das funktioniert auch ganz gut, nur ist es so, dass ich aufgrund der Umstände eine LinkedList benötige, da die Reihenfolge keine Rolle spielt und ich sehr, sehr oft Objekte hinzufügen bzw. wieder entfernen muss.
Aber wie mache ich das mit einer doppelt verketten Liste?
LinkedList<objec> ?
Lg Ishlidur