Laden...
I
Ishildur myCSharp.de - Member
Programmierer Schweiz Dabei seit 15.09.2005
Benutzerbeschreibung

Forenbeiträge von Ishildur Ingesamt 431 Beiträge

16.08.2006 - 14:07 Uhr

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...

16.08.2006 - 14:01 Uhr

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...

16.08.2006 - 13:48 Uhr

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

16.08.2006 - 13:44 Uhr

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

14.08.2006 - 16:58 Uhr

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...

14.08.2006 - 13:13 Uhr

Danke

14.08.2006 - 12:04 Uhr

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

12.08.2006 - 19:07 Uhr

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;
   }
  }
  // ------------------------------------------------------------------------------------------


12.08.2006 - 18:45 Uhr

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

12.08.2006 - 18:32 Uhr

Hat noch niemals jemand von euch die BindingSource.Find funktion verwendet? 8o

12.08.2006 - 17:38 Uhr

Wieso machen die denn das auch protected, verflixt noch eins ??!!

12.08.2006 - 17:29 Uhr

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

12.08.2006 - 17:20 Uhr

Zu zwei. Hoppla habe ich nicht gewusst, aber OK, wenns proceted ist, dann kommts doch auf dasselbe raus, oder?

12.08.2006 - 17:03 Uhr

@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...

12.08.2006 - 16:13 Uhr

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

12.08.2006 - 13:03 Uhr

Ja, wir hatten eben den Text gleichzeitig geschrieben... 😁

12.08.2006 - 12:21 Uhr

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?

12.08.2006 - 11:34 Uhr

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

12.08.2006 - 10:40 Uhr

@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!");
   }

12.08.2006 - 10:29 Uhr

@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!");
   }

12.08.2006 - 10:16 Uhr

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.<???>);
 }

12.08.2006 - 10:05 Uhr

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

08.08.2006 - 18:06 Uhr

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

08.08.2006 - 14:12 Uhr

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

08.08.2006 - 13:30 Uhr

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!!! 😜

08.08.2006 - 08:06 Uhr

@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

07.08.2006 - 20:07 Uhr

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

04.08.2006 - 14:45 Uhr

Hallo zusammen
Wie kann ich feststellen, wenn sich die DataRowVersion einer DataRow verändert hat, gibts da eine Möglichkeit?

Greetz Ishildur

03.08.2006 - 14:21 Uhr

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

02.08.2006 - 14:39 Uhr

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

02.08.2006 - 12:14 Uhr

@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);

02.08.2006 - 12:08 Uhr

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

02.08.2006 - 09:45 Uhr

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!

21.07.2006 - 16:16 Uhr

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

20.07.2006 - 09:38 Uhr

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

20.07.2006 - 08:51 Uhr

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;
  }
  // ------------------------------------------------------------------------------------------
 }
 // *******************************************************************************************
}
// ############################################################################################


19.07.2006 - 16:11 Uhr

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

19.07.2006 - 15:44 Uhr

@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! 😜

19.07.2006 - 15:05 Uhr

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

19.07.2006 - 14:43 Uhr

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";
  }
  // ------------------------------------------------------------------------------------------
 }
 // *******************************************************************************************
}
// ############################################################################################

19.07.2006 - 14:36 Uhr

@-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?

19.07.2006 - 11:07 Uhr

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:

  • BindingSource.CurrentItemChanged wird leider niemals aufgerufen, wenn sich ein Eigenschaftenwert der Current-Eigenschaft geändert hat. 🤔
  • Die DataRowView.RowVersion ändert ihren Wert niemals auf Proposed, wenn sich deren Daten verändert wurden. 🤔
  • DataRowView.IsEdit ist leider immer true, auch wenn die Daten niemals angefasst werden. Man sieht dies gut beim Navigieren. Rufe ich BindingSource.MoveNext auf, dann ist das neue Current automatisch auf IsEdit = true... 🤔
  • Wenn ich BindingSource.AddNew aufrufe, dann wird der Wert nicht ans Textfeld weitergegeben, obwohl DataBinding.ControlUpdateMode auf ControlUpdateMode.OnPropertyChanged eingestellt ist. Ich muss dann manuell noch BindingSource.CurrencyManager.Refresh aufrufen. Wenn ich DataTable.Add aufrufe, dann klappt alles wie erwartet. 🤔

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;
 }
}

19.07.2006 - 08:28 Uhr

Erst mal vielen Dank für euro Zeit! Ich habe jetzt Decimal verwendet anstatt SmallMoney, dann klappt alles wunderbar!

18.07.2006 - 14:33 Uhr

Sagt mal, habt ihr wirklich keine Ahnung oder antwortet ihr mir einfach aus Prinzip nicht?

18.07.2006 - 12:03 Uhr

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

11.07.2006 - 14:40 Uhr

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.
Hinweise

Da 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... 😜

11.07.2006 - 14:19 Uhr

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!!!

11.07.2006 - 14:08 Uhr

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

11.07.2006 - 13:35 Uhr

@Noodless
Kannst du mir bitte sagen, wie ich den DataSourceUpdateMode einer DataGridView verändern kann? Das ist echt mega wichtig!

Lg Ishildur

02.07.2006 - 09:59 Uhr

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