Laden...

Forenbeiträge von UHM Ingesamt 22 Beiträge

30.09.2021 - 11:09 Uhr

Das ganze auf Englisch zu bringen und so nach Fehlern zu googeln ist auch nicht das Problem, nur dann dort etwas zu finden das auf dem gleichen Problem beruht ist nicht wirklich möglich. Gibt genug andere Fehlerdiskussionen bei denen es eben nicht um diese BindingList-Konstellation geht und da nicht wirklich helfen.
Daß die Ursache nicht im inneren von .NET liegt ist mir schon klar, aber es ging ja auch ums Debuggen. Meist hilft da dann schon zu sehen was da im inneren für Prüfungen schief laufen um dann zu sehen was außen falsch eingefüttert wurde. Aber das ist erstmal nicht. Ich schau mal ob ich das irgendwie aktivieren kann.

Aber das mit der BindingSource-Zuweisung war's. Zumindest für's erste funktioniert das.

Bis denne und vielen Dank ...
UHM

30.09.2021 - 09:02 Uhr

Der Debugger sagt für mich leider nicht viel - er kann die Daten der Spalte nicht auswerten (ContentBounds, EditedFormattedValue, FormattedValue, PreferredSize, da steht es löst diese Exception aus). Der Value ist aber sichtbar (z.B. DBNull oder 1). Und bei der Zeile .visible = true kommt dann

Fehlermeldung:
System.InvalidCastException
HResult=0x80004002
Nachricht = Das Objekt des Typs "Buddy" kann nicht in Typ "System.Data.DataRowView" umgewandelt werden.
Quelle = System.Data
Stapelüberwachung:
bei System.Data.DataColumnPropertyDescriptor.GetValue(Object component)
bei System.Windows.Forms.DataGridViewComboBoxCell.ItemFromComboBoxDataSource(PropertyDescriptor property, Object key)
bei System.Windows.Forms.DataGridViewComboBoxCell.LookupDisplayValue(Int32 rowIndex, Object value, Object& displayValue)
bei System.Windows.Forms.DataGridViewComboBoxCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
bei System.Windows.Forms.DataGridViewComboBoxCell.GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, Int32 rowIndex, Size constraintSize)
bei System.Windows.Forms.DataGridViewCell.GetPreferredWidth(Int32 rowIndex, Int32 height)
bei System.Windows.Forms.DataGridViewColumn.GetPreferredWidth(DataGridViewAutoSizeColumnMode autoSizeColumnMode, Boolean fixedHeight)
bei System.Windows.Forms.DataGridView.AutoResizeColumnInternal(Int32 columnIndex, DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaInternal, Boolean fixedHeight)
bei System.Windows.Forms.DataGridView.AutoResizeAllVisibleColumnsInternal(DataGridViewAutoSizeColumnCriteriaInternal autoSizeColumnCriteriaFilter, Boolean fixedHeight)
bei System.Windows.Forms.DataGridView.OnGlobalAutoSize()
bei System.Windows.Forms.DataGridView.OnHandleCreated(EventArgs e)
bei System.Windows.Forms.Control.WmCreate(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.DataGridView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Das passiert tief im Inneren von .NET, da kann ich nicht debuggen.

"idBuddyDataGridViewTextBoxColumn" ist nicht direkt eine Eigenschaft, eher ein abgeleiteter Name. Den erstellt der Designer von Visual Studio automatisch sobald man das DataGridView anlegt. Leider ändert er ihn dann nicht mit wenn man die Spalte von der Textbox in eine ComboBox umstellt. Eigentlich ist damit die ComboBox-Spalte gemeint.


    private System.Windows.Forms.DataGridViewComboBoxColumn idBuddyDataGridViewTextBoxColumn;

      // 
      // idBuddyDataGridViewTextBoxColumn
      // 
      this.idBuddyDataGridViewTextBoxColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
      this.idBuddyDataGridViewTextBoxColumn.DataPropertyName = "IdBuddy";
      this.idBuddyDataGridViewTextBoxColumn.DataSource = this.komponentenBuddyBindingSource;
      this.idBuddyDataGridViewTextBoxColumn.DisplayMember = "Komponentenname";
      this.idBuddyDataGridViewTextBoxColumn.HeaderText = "Buddy";
      this.idBuddyDataGridViewTextBoxColumn.Name = "idBuddyDataGridViewTextBoxColumn";
      this.idBuddyDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
      this.idBuddyDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
      this.idBuddyDataGridViewTextBoxColumn.ValueMember = "IdBuddy";
      this.idBuddyDataGridViewTextBoxColumn.Width = 62;

29.09.2021 - 15:27 Uhr

Hallo,

ich habe eine Klasse Buddy, die Elemente einer BindingList darstellen soll:



    public class Buddy
    {
      private string name;
      private int id;
      public Buddy() { }
      public Buddy(string nameForPart, int numberForPart)
      {
        Komponentenname = nameForPart;
        IdBuddy = numberForPart;
      }

      public string Komponentenname
      {
        get { return name; }
        set { name = value; }
      }

      public int IdBuddy
      {
        get { return id; }
        set { id = value; }
      }
    }


Die Liste wird dann im Prinzip folgendermaßen einem DataGridView zugeteilt:


      BindingList<Buddy> blBuddy;

      blBuddy = new BindingList<Buddy>();

     /* füllen der Buddyliste */

      komponentenBuddyBindingSource.DataSource = blBuddy;
      this.idBuddyDataGridViewTextBoxColumn.DataSource = this.komponentenBuddyBindingSource;

Dabei wird nur eine Spalte über diese BindingList gefüllt, für die anderen Spalte ist allesamt die Tabelle direkt als BindingSource angegeben.

Beim Start ist das DataGridView erst einmal unsichtbar. Sobald ich es auf visible = true setze erhalte ich allerdings folgenden Fehler, falls die DataTable nicht leer ist:

Fehlermeldung:
Das Objekt des Typs "Buddy" kann nicht in Typ "System.Data.DataRowView" umgewandelt werden.

In einer einfacheren Testanwendung ohne anderen Spalten und auf einem einfachen DataSet basierend funktioniert das so. Warum hier nicht? Stört da die andere Bindung?

Gruß
UHM

19.07.2021 - 21:18 Uhr

Läuft, besten Dank und schönen Abend noch. 🙂

19.07.2021 - 20:20 Uhr

Hallo,

ich habe eine abgeleitete serialisierbare Klasse zum Speichern der Benutzterdaten im Isolated Storage. Dabei ist eine Liste mit Dateinamen in der Basisklasse, die in einer DLL ist. Leider verdoppelt sich die Liste jedes Mal beim serialisieren und wieder deserialisieren. Auszüge aus der Klasse sind dabei:


  [Serializable]
  public class UserData
  {
    public List<String> strlOtherFilename;

    public List<String> OtherFilenames
    {
      get { return strlOtherFilename; }
    }

    public UserData()
    {
      strlOtherFilename = new List<string>();
      ....
    }
  }

  [Serializable]
  public class AppUserData:UserData
  {
    // hier ist in der ganzen abgeleiteten Klasse nichts mit den Dateinamen
    ...
    public AppUserData()
    {
       ...
    }
  }

  public partial class DrawingApp : Form, IMessageFilter
  {
    protected UserData Benutzerdaten;

   ...

    virtual protected void AppSaveUserData(XmlSerializer xs, IsolatedStorageFileStream userData)
    {
      if (null == xs)
      {
        xs = new XmlSerializer(typeof(UserData));
      }
      xs.Serialize(userData, Benutzerdaten);
    }

    virtual protected void AppLoadUserData(XmlSerializer xs, StreamReader sr)
    {
      if (null == xs)
      {
        xs = new XmlSerializer(typeof(UserData));
      }
      Benutzerdaten = (UserData)xs.Deserialize(sr);
    }

    virtual protected void DrawingApp_Load(object sender, EventArgs e)
    {
      try
      {
        using (IsolatedStorageFileStream userData = new IsolatedStorageFileStream(GetUserDataStorageName(), FileMode.Open))
        {
          if (null != userData)
          {
            using (StreamReader sr = new StreamReader(userData))
            {
              AppLoadUserData(null, sr);
            }
            ...
          }
        }
      }
      catch
      {
        Benutzerdaten = new UserData();
      }
      ...
  }

    override protected void AppLoadUserData(XmlSerializer xs, StreamReader sr)
    {
      if (null == xs)
      {
        xs = new XmlSerializer(typeof(AppUserData));
      }
      audBenutzerdaten = (AppUserData)xs.Deserialize(sr);
      SetUserData(audBenutzerdaten);

    }

  public partial class MainApp : DLL.DrawingApp
  {
    protected AppUserData audBenutzerdaten;

    ...

    override protected void AppSaveUserData(XmlSerializer xs, IsolatedStorageFileStream userData)
    {
      ...
      if (null == xs)
      {
        xs = new XmlSerializer(typeof(AppUserData));
      }
      FileStream fs = new FileStream("Test.txt", FileMode.Create);
      xs.Serialize(fs, (AppUserData)audBenutzerdaten);   // Testausgabe in Datei
      xs.Serialize(userData, (AppUserData)audBenutzerdaten);
   }

    override protected void DrawingApp_Load(object sender, EventArgs e)  // Event Form.Load
    {
      base.DrawingApp_Load(sender, e);
      ...
    }

Benutzerdaten und audBenutzerdaten sind zwar auf dem ersten Blick 2 verschiedene Objekte, werden aber immer gleichgesetzt gehalten (Benutzerdaten = audBenutzerdaten).
In der zum Test ausgegebenen Datei, die wie ich hoffe dann identisch mit dem Isolated Storage ist, steht dann:


<?xml version="1.0"?>
<RvmConfigUserData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <strlOtherFilename>
    <string>C:\...\Test.tst</string>
  </strlOtherFilename>
  ...
  <OtherFilenames>
    <string>C:\...\Test.tst</string>
  </OtherFilenames>
  ...
</AppUserData>

Für mich ist dabei etwas verwunderlich, daß dann da <OtherFilenames> mit enthalten ist, das ist ja nur ein Zugriffskonstrukt. Sollte aber eigentlich nichts bewirken, da <OtherFilenames> ja nur get besitzt und kein set.
Oder interpretiere ich da etwas falsch?

Gruß
UHM

02.07.2021 - 10:44 Uhr

Hallo,

Ich habe ein DataGridView, das mir verschiedene Datensätze anzeigt. Dabei kann in einer Spalte eine Referenz auf eine andere Zeile der in diesem DataGridView mittels einer ComboBox angegeben werden. In der ComboBox wird dabei ein Name dargestellt, der im Datensatz enthalten ist (String).
Nun ist es so, daß die Datensätze in diesen Fällen paarweise vorhanden sind und beide Datensätze des gleichen Paares den gleichen Namen enthalten. Es gibt zwar in einem anderen Datenfeld dann einen Zusatz, durch den die beiden Einträge unterscheidbar sind, aber in der ComboBox kann ich diesen nicht mit anfügen, da zumindest der VS-Designer da nur die Eingabe eines Feldes als DisplayMember erlaubt. In der ComboBox soll man nun eigentlich immer auf den jeweils anderen Datensatz des Paares verweisen. In nicht paarweisen Datensätzen bleibt der Verweis einfach leer.
Ich habe also z.B. folgenden Ziel-Situation:


Name  Zusatz  Verweis
  A      1     A (2)
  A      2     A (1)
  B      1     B (2)
  B      2     B (1)
  C
  D

Nun ist es allerdings so, daß wenn ich einen Verweis einstellen will, meist auch der Verweis des referenzierten Datensatzes auf sich selbst gestellt wird.
Also z.B. ich stelle A1-Verweis auf A2, dann den A2-Verweis auf A1, und wenn ich dann wieder den A1-Verweis anschaue steht dieser auf A1. Man kann dies an der markierten Position in der geöffneten ComboBox erkennen.
Evtl. passiert das nicht sofort beim Einstellen des anderen Verweises, aber spätestens wenn man die ComboBox des Datensatzes wieder aufmacht, bei der geöffneten ComboBox sieht man ja nicht, daß sich etwas ändert.
Was nicht passiert ist, daß A1 auf B1 oder B2 verstellt wird, es bleibt schon immer auf Ax. Bzw. B bleibt immer auf Bx
Das Ganze ist aber nicht Sinn der Sache. Woher kommt das, und gäbe es eine Möglichkeit das abzustellen? Oder ist es nötig den Namen auch eindeutig zu machen, damit der nicht vertauscht wird? Das wäre aber für den Rest des Programmes nicht so toll.

Viele Grüße
UHM

27.05.2021 - 14:55 Uhr

Wo befinden sich denn die Instanzen der Form?

Gruß
UHM

27.05.2021 - 14:51 Uhr

Cool.
Reiter schließen hat gereicht. Was komisch ist, weil komplettes Studio zu und wieder auf hatte nichts gebracht.
Danke.

Gruß
UHM

25.05.2021 - 18:54 Uhr

Hallo,

Der Designer bringt seit neuestem "Das Desingnerladeprogramm hat keine Stammkomponente bereitgestellt, aber den Grund nicht angegeben." wenn folgende Zeile in der .designer.cs aktiv ist:


      this.idSubtypDataGridViewTextBoxColumn = new FilteredDataGridViewComboBoxColumn();

Dabei ist die Klasse derzeit so definiert, also einfach leer:


  public class FilteredDataGridViewComboBoxColumn : DataGridViewComboBoxColumn
  {
    public FilteredDataGridViewComboBoxColumn()
    {
//      this.CellTemplate = new FilteredTypeDataGridViewComboBoxCell();
    }
  }

früher hatte das schon funktioniert, auch mit der Zeile in der Klasse nicht auskommentiert. Weiß nicht wie das reingekommen ist.
Bei der Suche nach dem Ursprung trat auch ein Fehler auf in etwa wie, daß der Designer die Klasse FilteredDataGridViewComboBoxColumn nicht findet. Diese ist aber im gleichen namespace.
Jemand eine Idee dazu?

Grüße
UHM

21.05.2021 - 09:50 Uhr

Also die Verschwinderitis kam, weil der Parent das falsche Panel war und das DataGridView dann über dieses unsichtbar blieb.

Allerdings ist immer noch der Effekt da, daß jedes Mal beim Laden der Tabelle der DataError kommt. Inzwischen habe ich festgestellt, daß der Effekt auch bei anderen DataGridViews auftritt, wenn die ComboBoxen haben.

18.05.2021 - 18:52 Uhr

Hallo zusammen,

eins von den 30 DataGridView war wohl schlecht ...

Ich habe verschiedene DataGridViews erstellt, die soweit erstmal funktionieren wie ich sie zumindest programmiert habe. Übers Menü schalte ich zwischen denen hin und her, indem ich sie sichtbar oder unsichtbar schalte. Alle basieren auf einer Datenbank mit der sie über BindingSource verbunden sind. Mein neuestes in der Serie will aber nicht so recht.

Am Anfang hatte ich da irgendwas falsch gemacht und die falschen Tabbellen/Binding Source ausgewählt. Aufgrund der Probleme habe ich das DataGridView nochmal im Designer gelöscht und neu erstellt. Damit hat sich das Verhalten leicht verändert.

Derzeit habe ich damit 2 Probleme:

  1. ein ComboBox-Feld wirft im Fall, daß das DataGridView beim Start sichtbar bleibt immer einen DataError. Als Exception wird dabei "Der DataGridViewComobBoxCell-Wert ist ungültig" angegeben. Dies tritt bei jeder Zeile der Tabelle auf. Die ComboBox holt sich dabei die Daten (einen String) aus einer anderen Tabelle, auf die über deren primary key zugegriffen wird.
    Bevor ich das DataGridView gelöscht und neu aufgesetzt hatte war danach der Effekt so, daß der String in der ComboBox angezeigt wurde, man diese aber nicht öffnen konnte. Nun nach dem neuaufsetzen kann man diese dagegen öffnen und alle Texte aus der anderen Tabelle tauchen da auch korrekt auf. Wenn ich während der Exception die Werte in den Tabellen überprüfe fällt mir zumindest nicht auf, daß etwas nicht stimmt. Das DataGridView funktioniert dann im weiteren Verlauf, bis zu 2).
    Schalte ich beim Start dagegen das DataGridView sofort auf unsichtbar, dann tritt sofort Problem 2) auf und der Fehler 1) eigentlich nie.

  2. Schalte ich im Menü auf eine andere Ansicht und dann wieder zurück, d.h. das DataGridView wird erst unsichtbar und dann wieder sichtbar gesetzt, dann bleibt es irgendwie unsichtbar. Der BindingNavigator dagegen, den ich für fast alle DataGridViews benutze und nur immer auf die entsprechend sichtbaren DataGridViews lege ist dagegen sichtbar und funktioniert wunderbar, d.h. ich kann durch alle Datensätze der Tabelle navigieren, sehe sie nur nicht. Sichtbar ist dies durch die aktuelle Datensatznummer im Navigator, die maximal die Anzahl der Einträge in der Tabelle annimmt.

Hat jemand irgendwelche Ideen dazu, was da passiert?

Gruß
UHM

16.02.2021 - 18:15 Uhr

Ok, war wohl schon die Erstellung des DLL-Projekts falsch.

16.02.2021 - 18:02 Uhr

Ich habe keine Möglichkeit etwas anderes auszuwählen.
Bei der DLL gibt es nur Core-Auswahlen, im Hauptprogramm nur Framework-Auswahlen. Sollte das an anderer Stelle entschieden werden?

16.02.2021 - 17:21 Uhr

Also den Link konnte ich hinzufügen, die Klassen der DLL sind jetzt im Hauptprojekt auch bekannt. Allerdings bekomme ich jetzt fast überall Fehlermeldungen wie :

Fehler CS1705 Assembly "xxxdll" mit Identität "...dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" verwendet "System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mit einer höheren Version als die referenzierte Assembly "System.Runtime" mit Identität "System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".

Wo stelle ich denn die Runtime-Version ein?
Hauptprogramm ist derzeit Framework 4.8 (hatte es auch mit 4.7 am Anfang) und DLL ist .NET Core 3.1
Gibt's da noch eine andere Einstellung oder fehlt mir da gerade etwas?

16.02.2021 - 08:34 Uhr

Ok, jetzt waren wir gleichzeitig, guten Morgen
Ich schau mal.
Hier VS2019

16.02.2021 - 08:31 Uhr

Bzw. als Ressource ist ein Bild mit drin. Kann es an dem liegen?

16.02.2021 - 04:51 Uhr

Geschrieben ist die DLL ausschließlich in C#. Gäbe es eine Einstellung, mit der sich die DLL derart verhunzten ließe?

15.02.2021 - 18:00 Uhr

Hallo Th69,

Äh, nein.
Die Fehlermeldung kommt dann, wenn ich versuche die DLL mit der Basisklasse zu dem anderen Projekt im VS über "Hinzufügen -> neues Element -> Windows Forms -> Geerbtes Formular" hinzufügen will. Dabei kann man auch die DLL direkt über einen Datei-öffnen-Dialog im BIN/debug-Verzeichnis auswählen. Klickt man die an und dann OK, dann kommt die Fehlermeldung. Nicht erst beim Ausführen, soweit kommt man garnicht, da es schon nicht funktioniert die DLL zum Projekt hinzuzufügen.

Gruß
Udo

Edit: Ich probiere mal die DLL in das andere Projekt zu kopieren und dort hinzuzufügen.
Edit2: Nein, funktioniert dann auch nicht.

15.02.2021 - 14:53 Uhr

Hallo,

ich habe versucht aus einer bestehenden App ein Basisformular herauszuziehen, damit ich das in zukünftigen Projekten verwenden kann. Die Durchführung habe ich gemäß Exemplarische Vorgehensweise: Demonstrieren der visuellen Vererbung - Windows Forms .NET Framework versucht.
Das Bauen der DLL hat jetzt soweit geklappt - oder auch nicht. Beim Versuch die als geerbtes Formular in ein anderes Projekt hinzuzufügen kommt die Meldung > Fehlermeldung:

Die Assembly ...dll kann nicht geladen werden. Stellen Sie sicher, dass die Datei eine gültige .Net Framework-Assembly ist

Welche Einstellung ist denn da falsch?

Gruß
Udo

19.08.2009 - 12:26 Uhr

Super, das war's anscheinend. 👍 Danke!

Udo

19.08.2009 - 10:59 Uhr

Hallo Florian,

Mit den Datentypen liegst Du richtig: Decimal 5/2 bzw. Text(20).
Das mit den einzelnen Feldern habe ich schon probiert, es tritt bei beiden auf. Nur wenn ich keines der beiden Felder ändere, dann tritt kein Fehler auf 8)

Ausnahmedetails:
System.Data.OleDb.OleDbException wurde nicht behandelt.
Message="Datentypen in Kriterienausdruck unverträglich."
Source="Microsoft JET Database Engine"
ErrorCode=-2147217913
StackTrace:
bei System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
bei UHM_Hausverwaltung.UHMHausverwaltung.FlatEdit(Int32 p) in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Hausverwaltung.cs:Zeile 573.
bei UHM_Hausverwaltung.UHMHausverwaltung.tbFlat_DoubleClick(Object sender, EventArgs e) in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Hausverwaltung.cs:Zeile 542.
bei System.Windows.Forms.Control.OnDoubleClick(EventArgs e)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.Label.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei UHM_Hausverwaltung.Program.Main() in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

Mir hilft der Stacktrace aber auch nicht weiter.

Grüße auch
Udo

19.08.2009 - 10:30 Uhr

Hallo,

ich versuche meine erste Anwendung mit ADO, weiß derzeit aber nicht weiter. Ich greife mit VS C# Express auf eine Access 2003 Database mit mehreren Tabellen zu, die ich über Dialogboxen editieren möchte. Dazu habe ich für einen Datensatz nun folgende Funktion erstellt:

        private void FlatEdit(int p)
        {
            using (Flat dlgFlat = new Flat())
            {
                String strSQL = "SELECT * FROM Wohnung";

                OleDbDataAdapter adapter = new OleDbDataAdapter();
                adapter.SelectCommand = new OleDbCommand(strSQL, con);
                OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter); 
                DataSet dsFlats = new DataSet();
                adapter.Fill(dsFlats, "Wohnung");
                DataTable dtFlats = (DataTable)dsFlats.Tables[0];
                DataView dvFlats = new DataView(dtFlats);

                dvFlats.RowFilter = "ObjektID = " + ObjectGetIndex().ToString();
                dlgFlat.Text = "Wohnung " + dvFlats[p][0].ToString();
                dlgFlat.FlatSize = Convert.ToDecimal(dvFlats[p]["Qm"]);
                dlgFlat.Kennung = dvFlats[p]["Kennung"].ToString();
                if (dlgFlat.ShowDialog() == DialogResult.OK)
                {
                    dvFlats[p].BeginEdit();
                    dvFlats[p]["Qm"] = dlgFlat.FlatSize;
                    dvFlats[p]["Kennung"] = dlgFlat.Kennung;
                    dvFlats[p].EndEdit();
                    
                    adapter.Update(dsFlats, "Wohnung");
                 }
            }
        }


Beim Update erhalte ich nun immer die OleDbException "Datentypen in Kriterienausdruck unverträglich."
Weiß da einer hier was da falsch ist und wie man das richtig macht?

Danke im Voraus
Udo