Donnerstag, März 31, 2005

Probleme bei CodeDom mit VB.NET mit Shadows und Overloads

Beim automatischen Erstellen von Code für VB.NET durch das CodeDom gibt es das Problem (den Bug?), dass Shadows nicht allein erzeugt wird, wenn die MemberAttributes auf New gestellt werden. Vielmehr wird Overloads Shadows erzeugt und das ist in VB.NET nicht erlaubt. Also hab ich folgenden Workaround entwickelt: Nach dem Erzeugen des Codes wird geprüft, ob mit VB.NET erzeugt wurde und dann werden mit Hilfe des zugrundeliegenden StringBuilders einfach die problematischen Stringfolgen ersetzt:

// Take compile Unit and make the code
gen.GenerateCodeFromCompileUnit(unit, writer, null);

if (_Provider is VBCodeProvider)
{
writer.Flush();
writer.GetStringBuilder().Replace(" Overloads Shadows ", " Shadows ");
}

ComboBox an Datenquelle binden - Flackern

Wenn man eine ComboBox an eine Datenquelle (Tabelle, View) mit Expression-Columns bindet, dann werden bei der Veränderung von Feldern, die in der Expression vorkommen (z.B. Child-Zeilen bei Verwendung von Sum(Child)), sehr sehr viele SelectedValueChanged-Ereignisse aufgerufen, die zu einem Flackern der ComboBox führen.

Mittwoch, März 30, 2005

Datenbindung der ComboBox in .NET

Hier wird beschrieben, in welcher Reihenfolge man am besten die Eigenschaften für eine Combobox oder Listbox setzt, um möglichst wenige und die richtigen Events beim Initialisieren aufzurufen: Erst DisplayMember, dann ValueMember und zum Schluss die DataSource.

The Code Project - Best Practice for Binding WinForms ListControls - C# Programming

Will man die Ausgabe von DisplayMember irgendwie formatieren (bei mir z.B. das Datum), dann muss man DrawMode auf OwnerDrawFixed setzen und das DrawItem-Event wie folgt abfangen:

Private Sub cmbMonat_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cmbMonat.DrawItem
Dim g As Graphics = e.Graphics
Dim drv As DataRowView
Dim dtm As Date
Dim s As String

Dim brText As Brush

Dim rDraw As Rectangle
Dim bSelected As Boolean = CBool(e.State And DrawItemState.Selected)
Dim bValue As Boolean = CBool(e.State And DrawItemState.ComboBoxEdit)

rDraw = e.Bounds

If bSelected And Not bValue Then
brText = SystemBrushes.HighlightText
g.FillRectangle(SystemBrushes.Highlight, rDraw)
Else
brText = New Drawing.SolidBrush(cmbMonat.ForeColor)
g.FillRectangle(New Drawing.SolidBrush(cmbMonat.BackColor), e.Bounds)
End If

rDraw = Nothing

If e.Index = -1 Then Exit Sub
Try
drv = DirectCast(CType(sender, ComboBox).Items.Item(e.Index), DataRowView)

'Hier wird formatiert
dtm = Date.Parse(drv.Item(CType(sender, ComboBox).DisplayMember).ToString)
s = dtm.ToString("MMM yyyy")
Catch ex As Exception
Trace.WriteLine(ex.ToString)
End Try

Dim x, y As Integer
x = e.Bounds.Left + 1
y = e.Bounds.Top + 1

g.DrawString(s, CType(sender, ComboBox).Font, brText, x, y)
End Sub

Motherboard defekt? - Teil 3

Hab vorgestern (Montag) die Rücksendung des falschen Motherboards bei computeruniverse.net beantragt und gleich ein neues bestellt, ein ECS 651C-M V1.0. Das war außerdem deutlich billiger, weiß gar nicht, warum ich das nicht schon beim ersten Mal bestellt hab. Außerdem hab ich mich auf der Herstellerseite versichert, dass das mit der CPU funkioniert.
Bei der Rücksendung hab ich die Abholung ausgewählt, ein echt cooler Service. Nicht mehr zur Post latschen! Hat auch super funktioniert. Montag beantragt und vorhin (Mittwoch mittag) war der Postbote da. Hoffe mal, dass damit alles passt und ich das Geld wiederbekomme.

Montag, März 28, 2005

Updater für .NET

The Code Project - Updater - Free Tools

Sonntag, März 27, 2005

Motherboard defekt? - Teil 2

Hab das neue Motherboard von www.computeruniverse.net bekommen, ein MSI 865G M3-LS, mit der MSI-internen Nummer MS-7037-010R. Als ich dann alles umgebaut hatte, tat sich nichts. Zwar lief der CPU-Lüfter an, allerdings gings dann nicht weiter. Die Konsultation der FAQ und die Befolgung der Ratschläge (alles ausbauen bis auf das nötigste, also CPU und RAM) brachten keine Fortschritte. Es wird doch jetzt nicht die CPU und/oder der Speicher kaputt gegangen sein!?

Schließlich kam ich dann auf die CPU-Compatibility-Liste. Dort stand geschrieben, dass das Motherboard nicht mit dem P4 1,8 GHz Willamette funktioniert. Hab ich so einen? Also wieder das alte Motherboard rein, anschalten und mit CPU-Z das ganze überprüfen. Tatsächlich! Von solchen Sachen stand bei computeruniverse.net aber nichts. Also, eindeutig ein Rücksendungsgrund... Fortsetzung folgt!

Montag, März 21, 2005

Probleme mit ADO beim Durchführen vieler Zeilenänderungen innerhalb einer Transaktion

Wenn man mit ADO innerhalb einer Transaktion viele Zeilen (z.B. mit Connection.Execute) ändern lässt, kann es sein, dass ein Befehl hängt. Die Anzahl der Zeilen beläuft sich auf etwa 28.000 Löschungen und 28.000 neue Einfügungen von Zeilen.

Kleinere Stückelungen der Befehle oder weitgehende Vermeidung von Zeilenlöschungen brachten keine Abhilfe. Erst die Entfernung der Transaktion brachte Erfolg.

Der folgende Post beschreibt relativ gut diese Probleme, leider ohne Antwort: Google Groups: Ansicht Diskussionsthemen "VB App using Jet 4.0 hangs during INSERT SQL"

ADO properties

Alle Properties von Connections, Commands, Recordsets usw. sind hier aufgelistet und erklärt: Welcome to the MSDN Library

Samstag, März 19, 2005

Klasse für ADO.NET um Group By Funktionalität in DataSets zu realisieren

Hier wird eine Klasse beschrieben, die es ermöglicht, bereits geladene DataSet-Tables zu gruppieren:

HOW TO: Implement a DataSet GROUP BY Helper Class in Visual Basic .NET

Donnerstag, März 17, 2005

Motherboard defekt? - Teil 1

Seit einiger Zeit bastel ich jetzt schon am PC (Medion Microstar mit P4 1,8 GHz) von meiner Freundin rum. Grund: Er war zu laut! Dachte also, kann ja nur der CPU-Kühler sein und hab dann einen entsprechenden Kühler für den P4 Sockel 478 bestellt.

Als ich ihn einbauen wollte, erkannte ich erst, dass der gekaufte Kühler nicht auf dem MSI 6507 Motherboard befestigt werden kann. Die haben nicht das Standard-P4-Retention Module verwendet, sondern irgendsoein sonderbares Ding. Also musste ich erst noch das besorgen.

Nach dem erfolgreichen Kühlerumbau, dann das ernüchternde Ergebnis. Daran lag es gar nicht. Dann erst war ich so schlau, mal genau hinzuhören woher der Lärm kommt; und es war die Grafikkarte. Bei ihr war am Lüfter eine Schaufel abgebrochen und der lief dann wohl unrund und verursachte die Geräusche. Ankleben war nicht so erfolgreich (lag aber eher am Kleber, der wie Wasser war), also dachte ich mir, dass ich einfach symmetrisch noch 2 andere Schaufeln rausbreche, vielleicht gehts dann. Das schien dann relativ erfolgreich zu sein.

Seitdem hab ich aber ein anderes Problem, schwer zu sagen, ob das an diesen Umbauten liegt. Der PC stürzt beim Laden von Windows immer mit unterschiedlichsten Problemen ab. Häufig sind es Grafikfehler oder ein stillstehendes System. Sobald er mal "warm" geworden ist, läuft er aber stabil. Hab mal eine Ersatzgrafikkarte probiert und da war dasselbe Problem. Also liegts wohl nicht an der Grafikkarte.

Auf dem Motherboard sind mir aber einige Elkos aufgefallen, die sich an ihrer Sollbruchstelle leicht aufgewölbt haben und einige, bei denen wohl Elektrolyt ausgelaufen ist (so ne braune Soße).



Denke also, dass die Fehler unabhängig vom Umbau sind und nun ein neues Motherboard bestellt. Bin ja mal gespannt, obs daran liegt. Fortsetzung folgt...

Montag, März 14, 2005

Windows 98 und das Netzwerk

Hab heute erneut versucht einen Netgear Wireless-USB-Adapter MA111 am Laptop von meinem Vater zu installieren.

Beim ersten Versuch letzte Woche hat es eigentlich schon geklappt, nur leider war bei jedem Herunterfahren oder Ausstecken des Adapters der Computer abgestürzt.
Hab dann ewig rumprobiert, neue Beta-Treiber 2.5 etc., bis er gar nicht mehr funktioniert hat. :-) Fehlermeldung im Gerätemanager: "NDIS.vxd und NTKERN.VXD konnten den Treiber nicht laden" oder so.

Ein paar Tage später neuer Versuch. Wieder versucht alle Register zu ziehen (alle Netzwerksachen deinstallieren und neu installieren), bis ich im Internet wenigstens drauf aufmerksam wurde, dass die Abstürze vom ersten Versuch vielleicht an Win 98 lagen. Man braucht vielleicht Win 98 SE. Also eine alte unbenutzte SE-CD geholt und drüber gehaun. Hat zwar trotzdem nicht funktioniert, aber geschadet hats auch nicht.

Heute dann der Durchbruch. Weiß zwar nicht wie, aber plötzlich konnte er den Treiber wieder laden. Hab irgendwie noch Treiberdateien aus dem Windows\Inf Verzeichnis gelöscht, den USB-Stammhub aus dem Gerätemanager entfernt, usw. ; woran es aber lag weiß ich nicht.

Dann gabs aber noch ein Problem: Ich konnte nix anpingen. Da kam immer eine Zeitüberschreitung. Bis mir eingefallen ist, dass das an der eingebauten Netzwerkkarte liegt. Er kann sich nicht entscheiden über was er pingen soll. Hab zwar im Internet nach ner Lösung gesucht, aber nix wirklich passendes dazu gefunden. Es hieß in Foren immer, dass es sich "irgendwie von selbst erledigt" hätte. Ich also das Ding im Gerätemanager deaktiviert und siehe da, es funktioniert.

Wollte dann noch einige 100 MB an Bildern auf den Laptop laden, dafür war mir der 11b Adapter aber dann doch wieder zu langsam. Also wollte ich den 10/100 LAN Anschluss wieder aktivieren. Aber der war inzwischen nicht mehr im Geräte-Manager. Nach langem hin und her hab ich dann herausgefunden, dass bei diesem Toshiba-Notebook (inkl. Dockingstation), der LAN-Adapter aus dem Gerätemanager fliegt, wenn das Notebook nicht mehr am Strom hängt. Na super.

Naja, jetzt funktioniert endlich alles wie gewünscht.

Sonntag, März 13, 2005

Schlechter Fußballtag

So eine Scheiße:

Erst verliert Unterhaching und dann verlieren auch noch die Bayern. So brauchts nicht weitergehen. Bin zwar kein eingefleischter Fan, aber trotzdem...