Sprechende Figuren auf der Web-Seite
31.08.2007 06:37:12
|
Thomas Schissler
Bin da gerade auf ein nettes Angebot gestoßen. SitePal bietet animierte Figuren, die
man sich selber konfigurieren kann. Diese Figuren können dann Texte, die man vorgibt,
sprechen, entweder aufgezeichnete Audio-Files oder auch über Texteingabe. Diese Figuren
lassen sich dann in eine Web-Seite integrieren.
Ist sicher interessant, wenn man ein entsprechendes Projekt hat. Mal sehen, vielleicht
kann ich das zukünftig mal nutzen.
SitePal Homepage
Deflowered twice on one day at nrw07
30.08.2007 14:28:00
|
Thomas Freudenberg
Last Friday the nrw07 took place in Wuppertal, the biggest community
conference in North Rhine-Westphalia. About 100 attendees including
the 22 speakers! The Diebels brewery contributes a couple of beer
crates, and Subway served lots of sandwiches for lunch.
And I was deflowered twice on that day.
First, it was my very first talk! I gave a Community Server
presentation a couple of month ago at our local .NET UserGroup, and
the other guys suggested that I should repeat that at the nrw07.
Unfortunately, I didn´t object enough.
When I sat in the hotel lobby with some other speakers the night
before nrw07, I started getting nervous, but they managed to calm me
down (or was it the beers we had?). The next day was fine, my talk was one of the first. It ran pretty well (as far as I am
concerned). Of course we experienced the usual technical difficulties
such as a projector, whose picture was twice as large as the screen and not resizable. Although I got the second largest room in the facility,
there were only 7 attendees. Seems to me as Community Server is not of
interest for everyone. The good thing about that is that those folks
already knew CS, so I didn´t have to start at square one, but instead
dive right into the technical stuff. The time flew, I ran over about
10 minutes and had still enough material for another hour. Nevertheless my talk can not have been that bad because the audience asked the right questions afterwards. I hopethink that´s a good sign.
My second premiere happened later that night, when Craig Murphy
interviewed me for a podcast (not aired yet). At that point in time I
already had a couple of beers, so it went quite smooth. It´s
self-evident that we talked much about Community Server. Because I
mentioned Twitter in my talk, Craig took me up on that, and somehow we
drifted into social networking, a topic I´m quite interested in. Even
when the podcast was over, we continued the discussion.
To sum it up, it was a great event, where I met many smart people.
Many thanks to the orga team, Stephan Oetzel and Daniel Fisher!
And now that I lost my virginity, I´m looking forward to give a talk
again next year (assumed they let me on stage ever again)
Here are some other speakers and attendees blogging about nrw07:
I met some more nice guys, who didn´t blog about this event. Nevertheless I´d like to send them my regards because we had such a good time and talks: Andreas Hoffmann, Christian Schütz, Mischa Hüschen, Pascal Kremmers, Constantin Klein, Marcel Gnoth, and Marcel Franke. Sorry if I forgot one, there were so many faces new to me. When you see me next time, just stop by and treat me to a beer...

LiveID jetzt mit CardSpace Unterstützung!
25.08.2007 09:19:40
|
Mathias Raacke
Windows LiveID unterstützt jetzt auch Windows CardSpace. Statt mit einem Passwort
ist es nun möglich, eine CardSpace InfoCard für die Anmeldung bei Windows LiveID zu
verwenden. Endlich!
Wie das genau funktioniert beschreibt Angus Logan in
seinem Blog. Außerdem gibt es dazu einen Screencast
auf Visitmix. Im LiveID Blog steht
zwar noch nichts, aber auch dort sollte es bald weitere Informationen zu LiveID und
CardSpace geben.
LiveID selbst wird im Moment für fast 1 Milliarde(!) Anmeldungen pro Tag verwendet,
außerdem ist es möglich, LiveID auch in eigenen Web Seiten zu verwenden. Es gibt dazu
auch Beispiele für PHP, Java und andere Sprachen.
Rechnerkonfiguration
21.08.2007 10:30:22
|
Thomas Schissler
Bei der Neuinstallation eines Entwicklungsrechners dauert es immer ewig, bis man sich
die ganzen nützlichen Helferlein zusammengesucht hat, die man im Laufe der Zeit zu
schätzen gelernt hat. Deshalb habe ich mir gedacht, ich schreibe mir mal eine Liste,
die ich dann immer wieder ergänzen kann. Und vielleicht ist für den einen oder anderen
da auch noch was interessantes dabei. Also so könnte ein Entwicklungsrechner aussehen:
Betriebsystem / Standardanwendungen:
-
Windows Vista Ultimate
-
Office 2007
-
SQL-Server 2005 Express
-
SQL-Server 2005 Management Studio
Entwicklungsumgebung:
Tools
Stand 05.10.2007
To be continued...
Stylesheets in ASP.Net UserControls in VS 2008
20.08.2007 16:45:30
|
Thomas Schissler
Will man mit Visual Studio 2008 einem UserControl ein StyleSheet zuordnen, sieht
das normalerweise so aus:
<%@
Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs"
Inherits="Controls.WebUserControl1" %> <head> <link href="../App_Themes/style.css" rel="stylesheet" type="text/css" /> </head> <asp:Button ID="Button1" runat="server" Text="Button" /><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
Damit scheint aber der Designer von Visual Studio 2008 Beta 2 Probleme zu haben. Sowohl
im Split-View als auch im Design-View wird nach einem Refresh nichts mehr angezeigt.
Bei mir hat hier ein kleiner Trick geholfen. Man verschiebt einfach das Link-Tag mit
dem Stylesheet ganz an's Ende des Codes. Dann kann man mit Hilfe der Refresh-Funktion
aus dem Kontext-Menü des Design-Panes die Anzeige aktualisieren und siehe da, Button
und Textbox werden wieder angezeigt.
Scroll-Position nach PostBack beibehalten
20.08.2007 11:58:20
|
Thomas Schissler
Ist eine ASP.Net Seite scrollbar, gibt es den unschönen Effekt, dass die Seite
nach dem Postback wieder ganz oben steht. Ich habe mal eine kleine Beispiel-Seite,
die diesen Effekt demonstriert:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="ValuePlanner_2008.Web.INN_ProjectArea.WebForm2"
%>
<%@ Register Assembly="cTextBox" Namespace="artiso_lib.UserControls"
TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled
Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%>
1: for (int i
= 0; i < 50; i++)
2: {
3: Response.Write(i
+ "<br>");
4: }
5:
%>
</div>
</form>
</body>
</html>
Dieses Problem kann man ganz einfach umgehen, indem man in der
Page-Direktive das Attribut MaintainScrollPositionOnPostback="true" einfügt, also:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="WebForm2.aspx.cs" Inherits="ValuePlanner_2008.Web.INN_ProjectArea.WebForm2"
MaintainScrollPositionOnPostback="true" %>
>
AJAX Toolkit ModalPopup per Javascript aufrufen
18.08.2007 13:57:57
|
Thomas Schissler
Im ASP.Net AJAX Toolkit findet man ein ModalPopup, das sehr gute Dienste leistet,
will man Meldungen etwas eleganter ausgeben als mit einem schlichten alert(). Die
Handhabung ist relativ einfach. Man nehme ein beliebiges Serverseitiges Control und
weise diesem den ModalPopupExtender zu. Dann gibt man noch mindestens die ID des Controls
an, das den Inhalt des Popups repräsentieren soll und fertig. Will man das Popup allerdings
client-seitig per Java-Script aufrufen, muss man ein wenig in die Trickkiste greifen.
Das Problem dabei ist, dass der ModalPopupExtender immer ein TargetControl braucht.
Ich habe dafür einfach ein unsichtbares DIV erzeugt, das mit runat="server" auch auf
dem Server sichtbar gemacht wurde. Dann kann man mit $Find('<ID des ModalPopupExtenders>').show()
das Popup aufrufen.
Neu war an diesem Beispiel für mich auch der Style filter: alpha(opacity = 70) mit
dem man eine Transparenz erzeugen kann.
<%@
Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ValuePlanner_2008.Web.INN_ProjectArea.WebForm1"
%> <%@ Register Assembly="AjaxControlToolkit"
Namespace="AjaxControlToolkit" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled
Page</title> <style type="text/css"> .modalBackground
{ filter: alpha(opacity = 70); background-color: #CCCCCC; } .ErrorMessage { background-color:
#800000; color: #FFFFFF; } </style> </head> <script language="javascript" type="text/javascript"> 1:
2: function okScript()
3: {
4: alert
("OK-Button wurde gedrückt");
5: }
</script> <body> <form id="form1" runat="server"> <div id="PopupPseudoPanel" style="display:
none" runat="server"> </div> <cc1:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> </cc1:ToolkitScriptManager> <cc1:ModalPopupExtender ID="ModalPopupExtender" runat="server" PopupControlID="Panel1" DynamicServicePath="" Enabled="True" TargetControlID="PopupPseudoPanel" BackgroundCssClass="modalBackground" OkControlID="OkButton" CancelControlID="CancelButton" OnOkScript="okScript();"> </cc1:ModalPopupExtender> <br /> <br /> <input id="Button2" type="button" value="button" onclick="$find('ModalPopupExtender').show();" /> <asp:Panel ID="Panel1" runat="server" CssClass="ErrorMessage" style="display:none"> <h1> Popup</h1> <p> Das
ist ein Popup!</p> <center> <asp:Button ID="OkButton" runat="server" Text="OK"></asp:Button> <asp:Button ID="CancelButton" runat="server" Text="Cancel"></asp:Button> </center> </asp:Panel> </form> </body> </html>
LINQ to SQL in ASP.Net Anwendungen
17.08.2007 08:53:05
|
Thomas Schissler
Wie man an meinen letzten Posts sieht, beschäftige ich mich momentan sehr intensiv
mit LINQ to SQL. Eine wichtige Lektion habe ich gerade eben gelernt. Folgende Ausgangssituation:
Ich habe eine ASP.Net Anwendung. In einem DAL lese ich per LINQ ein Objekt aus der
Datenbank und schreibe das dann in eine Session-Variable. Der Anwender bekommt das
Objekt an der Oberfläche angezeigt und kann es verändern. Nun möchte ich das Objekt
wieder in die Datenbank zurückschreiben. Fast alle Tutorials zu LINQ beschreiben,
wie einfach es ist, Daten via LINQ zu schreiben. Aber dort wird in einer einzigen
Funktion erst gelesen, dann werden die Daten verändert und dann wieder zurückgeschrieben.
Das tritt ja aber in der Praxis eher selten auf.
Also habe ich mich gefragt, was LINQ tut, wenn ich den DataContext einfach neu instanziere
und dann einfach mein Objekt per Add an die Tabelle hinzufüge. Na ja,wie zu erwarten,
hat LINQ gemeldet, dass der entsprechende Primary Key bereits existiert. Also was
tun? Den gesamten DataContext in die Session legen? Dass das keine gute Idee ist,
habe ich ziemlich schnell rausgefunden. Der DataContext skaliert sehr schlecht, da
er ein eingebautes Change-Tracking, Identity Tracking und sonst noch ein paar Nettigkeiten
hat, die sich aber in einer Web_Anwendung recht eklig verhalten können.
Nach einigem Suchen bin ich dann drauf gekommen, dass es auch noch eine Attach-Methode
gibt. Damit konnte ich mein Problem schön lösen. Das Ergebnis für das Schreiben sieht
nun so aus:
public void SaveProductVersion(cProductVersion
_ProductVersion) { DataContext dataContextProducts = new DataContext("Data
Source=NOTEBOOK_VISTA;Initial Catalog=ValuePlanner_2008;Integrated Security=True"); if (_ProductVersion.ID
== 0) { dataContextProducts.GetTable<cProductVersion>().Add(_ProductVersion);
} else { dataContextProducts.GetTable<cProductVersion>().Attach(_ProductVersion,
true); } dataContextProducts.SubmitChanges(); }
Hier wird abgefragt, ob es eine neue Produktversion ist (ID == 0). Wenn ja, dann füge
ich die per Add hinzu (die ID wird von LINQ automatisch vergeben). Bei einem bestehenden
Projekt verwende ich die Attach-Methode. Ganz einfach, wenn mans weiss. Wichtig ist
noch, dass alle Properties des Objektes das Attribut UpdateCheck=none benötigen.
ASP.Net 2.0 Data Access Tutorials
16.08.2007 11:06:18
|
Thomas Schissler
Scott
Mitchell hat 75 Tutorials zum Thema Data Access mit ASP.Net
2.0 geschrieben. Hier ist praktisch alles an Technologie beschrieben, was für die
Programmierung von datenbankbasierten Webanwendungen mit ASP.Net 2.0 notwendig ist.
Einzig LINQ wird momentan noch ausgespart. Eine wirklich tolle Sammlung an guten
Informationen.
Data Access Tutorials : The
Official Microsoft ASP.NET 2.0 Site
LINQ to SQL Debug Visualizer - ScottGu's Blog
16.08.2007 10:53:05
|
Thomas Schissler
Wenn man mit LINQ to SQL arbeitet, dann steht man sehr schnell vor dem Problem,
dass man sehen möchte, wass denn LINQ mit der Datenbank so treibt. Der SQL Profiler
kann zwar die abgesetzten SQL-Statements anzeigen, die zurückgegebenen Ergebnisse
muss mann dann aber von Hand abfragen. Viel eleganter geht es mit dem LINQ
to SQL Debug Visualizer von Scott Guthrie. Damit kann man die Abfrage im Debug-Modus
von Visual Studio 2008 einfach anzeigen lassen:
Mit dem Execute-Button kann man die Abfrage einfach ausführen und das Ergebnis anzeigen
lassen.
Ein echt cooles Tool. Download und eine Installationsanleitung gibt es hier.
LINQ
to SQL Debug Visualizer - ScottGu's Blog
Mit LINQ verknüpfte Tabellen in einem SELECT-Statement laden
15.08.2007 19:17:42
|
Thomas Schissler
Ich habe folgendes Datenmodell mit dem LINQ To SQL Designer aufgebaut:
So, eigentlich ganz einfach. Mit folgendem Code kann ich die Daten einlesen:
var formList
= from f in listDataContext.cFormListItems orderby f.FormShort select f;
var countryList
= from c in listDataContext.cCountryListItems orderby c.CountryName select c;
Damit liest LINQ die Daten für die Forms bzw. die Countries ein, die
zugeordneten Tabellen bleiben leer, bis man auf das entsprechende Element zugreift,
dann wird das nachgeladen (lazy loading). Dieser Effekt ist super, wenn ich z.B. eine
Liste der Kunden habe und den Kunden Bestellungen zugeordnet sind und ich teilweise
Kunden mit mehreren tausend Bestellungen habe. Dann will ich die Bestellungen nicht
gleich alle mitladen. Aber in meinem Fall war es so, dass in den verknüpften Tabellen
nur wenige Datensätze stehen und ich deshalb lieber alles auf einen Rutsch laden wollte.
Das geht dann so:
listDataContext = new cListDataContext("Data
Source=NOTEBOOK_VISTA;Initial Catalog=ValuePlanner_2008;Integrated Security=True"); //
Define LoadOptions to load some related tables with their parent tables in one select
statement DataLoadOptions loadOptions
= new DataLoadOptions();
loadOptions.LoadWith<cFormListItem>(f
=> f.FormType); loadOptions.LoadWith<cCountryListItem>(c
=> c.Market); listDataContext.LoadOptions = loadOptions;
Diesen Code muss man
vor der ersten Abfrage ausführen. Hier werden zwei LoadWith (jeweils für eine untergeordnete
Tabelle) mit angegeben. Dies bewirkt, dass die untergeordneten Tabellen mit der jeweiligen
Haupttabelle in einem einzigen SELECT Statement aus der Datenbank geladen werden!
Ein paar Sachen muss man allerdings beachten:
-
Die LoadOptions können nur vor der ersten Abfrage auf dem DataContext
zugewiesen werden.
-
Die Loadoptions können nicht mehr verändert werden, wenn sie einmal einem
DataContext zugewiesen wurden.
-
Für mehrere Tabellen ruft man das LoadWith einfach mehrfach auf.
Ich hätte das zwar schöner gefunden, wenn man das auch mit im Designer
einstellen könnte, aber es funktioniert einwandfrei.
Hier noch als Beweis das SQL-Statement, das dann tatsächlich auf der
Datenbank ausgeführt wird:
SELECT [t0].[ID],
[t0].[FormLong], [t0].[FormShort], [t0].[FormTypeID], [t1].[ID] AS [ID2],
[t1].[FormTypeLong], [t1].[FormTypeShort] FROM [values_Forms] AS [t0] INNER JOIN [values_FormTypes] AS [t1] ON [t1].[ID]
= [t0].[FormTypeID] ORDER BY [t0].[FormShort]
BE Gantt Update
13.08.2007 18:36:02
|
Boas Enkler
![]()
Soeben habe ich die
nächste Version des BE Gantts fertigstellen können
hier eine kurze Übersicht der wichtigsten Änderungen
Neu:
Events
- BarRightClick Event
- BarMoved Event
- BarSized Event
- BarAdded Event
- Methoden & Properties
- BETimeBarInfo.FixedType Gibt an wie eine bar gesperrt wird falls Bar.IsBarFixed
= true. So kann z.bsp. nur der Linke oder rechte rand einer bar gesperrt werden
- RemoveSingleBar - Methode zum entfernen einer TimeBar
- ClearBarsFromItem - Methode zum entfernen aller TimeBars eines Items
- bool InnerGantt.AllowBarDrag - Gibt an ob Bars via Drag & Drop Operationen verändert
werden dürfen
- bool LeftColumnVisible - Gibt an ob die linke Seite des Gantt Controls (Liste) sichtbar
ist
- NewDefaultTimeBar & CreateDefaultTimeBar zum erzeugen von BArs mti den Einstellungen
des Properties DefaulTimeBarVisuals
Allgemein
- ScaleDisplayTimeOnFarestBar - Methdode wenn ausgeführt passt das GanttChar seinen
Anzeigebreich soweit an, dass mindestens das späteste Ender einer Timbar noch im sichtbaren
beriech liegt
- ScrollToDateTime Methode, scrollt im Gantt Control zueinem im Anzeige Zeitraum vorhandenen
DateTime
- Bitmap Cache für Seperators
- Items sind über einen Click auf dem linken Header Control sortierbar
- BETimeBarInfo hat nun ein ContextMenu Property, dieses ContextMenu wird bei einem
RightClick nach dem BarRightclick Event angezeigt
- BugFix beim vertikalen scrollen wurden Rows nicht komplett dargestellt
- Optimierungen im aufbau der Anzeige
- Headeranzeige optimiert
Am linken Rad habe ich mal ein Diagram der Properties einer TimeBar eingefügt. Dies
sind alle für die TimeBars dynamisch definierbar.
Ich plane in der nächsten Version die Dokumentation der Bars für Intellisense einzubauen
und vielleciuht auch eine kleine vorabhilfe mit Samples zu generieren
TFS-Arbeitsbereiche auf dem Server löschen
10.08.2007 08:16:46
|
Thomas Schissler
Die Arbeitsbereiche des Team Foundation Server stellen eine Verknüpfung eines lokalen
Verzeichnisses mit einem Pfad in der Quellcode-Verwaltung her. Aus verständlichen
Gründen kann ein und das selbe Verzeichnis nicht mehrfach zugeordnet werden. Dies
gilt insbesondere für den Fall, dass zwei verschiedene Benutzer auf dem gleichen Rechner
das selbe Verzeichnis zuordnen wollen, auch wenn es sich auf den gleichen Pfad in
der Quellcode-Verwaltung bezieht. Das ganze macht Sinn. Aber was tun, wenn z.B. der
Benutzer A nicht mehr existiert und nun Benutzer B seine Projekte übernehmen soll?
Der Rat lautet hier, von Benutzer A alle Arbeitsbereiche löschen, bevor der Benutzer
gelöscht wird. Der Rat hilft aber wenig, wenn der Benutzer bereits gelöscht wurde
und man dann erst die Probleme feststellt. Oder wenn, wie in meinem Fall, durch einen
Umzug auf einen anderen Server der Benutzer neu angelegt wurde und zwar den gleichen
Namen hat, aber eine andere SID. Die Anpassung der SIDs in der TFS-Datenbank scheint
hier nicht richtig funktioniert zu haben.
Den lokalen Workspace zu löschen ist kein Problem, aber das hilft leider in diesem
Fall nicht. Die Arbeitsbereiche sind auch zusätzlich noch auf dem Server gespeichert
und dort muss man diesen nun löschen, damit man den mit dem neuen Benutzer neu einrichten
kann.
Zunächst der Befehl, mit dem man die Workspaces vom Server anzeigen kann:
tf workspaces /owner:* /server:<TFS-Servername> /format:detailed
Um einen Workspace zu löschen kann nun folgender Befehl verwendet werden:
tf workspace /delete <Workspace-Name>;<Benutzername>
/server:<TFS-Servername>
Es gibt auch noch den Befehl /updateUserName, der hat in meinem Fall aber leider nicht
funktioniert.
Gantt PreBeta
09.08.2007 11:26:25
|
Boas Enkler
So nun ist es bald soweit, die erste PreBeta Version steht bald zur Verfügung und
dann darf bei den Betatesten fleißig getestet werden.
Inzwischen kann man nun auch den Headerbereich farblich beeinflussen und auch für
die einzelnen Elemente Schriftarten wählen. Wochenenden kann man nun auch eine eigene
Farbe geben. In einem der nächsten Schritte soll es auch möglcih sein Freidefinierbare
bereiche des Controls ( also DateTime grenzen) beliebig einzufärben um so z.Bsp. bestimmte
phasen eines Zeitraums abbilden zu können
![]()
Datumswerte werden
per standard passend zur aktuellen CultureGeneriert können aber auch abweichend definiert
werden
Alle Properties habe ich unter der Kategorie "Gantt Settings" zusammen gefasst. s.
Screenshot links.
Jeder Elementtype (Item, Header,...) hat einen eigenen Visuals knoten an dem man Dinge
wie Backcolor, Font, Datumsformat abweichend vom Standard einstellen kann.
Denke so hat man die größe Flexibilität das control seinen Bedürfnissen anpassen zu
können.
So wie es aussieht geht heute abend oder morgen früh die Beta an die Tester raus.
in dem Sinn : Schonmal viel Spaß beim Testen !
Infragistics WebGrid Control in einer Zelle ansprechen
08.08.2007 11:05:43
|
Thomas Schissler
Will man in einem Infragistics WebGrid ein Control in einer Zelle einer TemplatedColumn
ansprechen, dann ist das gar nicht so einfach wie zunächst vermutet. Man muss ein
paar Umwege einlegen. So funktionierts aber dann:
protected void UltraWebGrid1_InitializeRow(object sender,
Infragistics.WebUI.UltraWebGrid.RowEventArgs e)
{
DropDownList ddlUnit
= ((DropDownList)((CellItem)((TemplatedColumn)e.Row.Cells.FromKey("Unit").Column).CellItems[e.Row.Index]).Controls[1]);
....
}>
Statt dem Controls[1] könnte man auch noch ein FindControl() nutzen, das wäre noch
etwas eleganter.
Einstiegstitel
07.08.2007 10:11:23
|
Boas Enkler
Da ich immer wieder nach Buchtitel gefragt werden habe ich hier ein paar der Bücher zusammengefasst, die mir Persönglich am meisten gebracht haben. Bei Bestellungen wärs toll wenn ihr die hier aufgeführten Amazon Partnerlinks verwenden würdet :)
- Visual C# 2005 Schritt für Schritt empfiehlt sich für einen Grundlegenden einstieg
in praktich alle wesentlcihen C# Themen
- Das 2. Buch ist eignetlcih ein Prüfungsvorereitungs buch (70-526) aber das Buch
geht sehr einfach in einer Tutorial artigen Form über sämtliche Windows Forms Themen
und ist somit auch gut für Anfänger geeignet
- Das dritte Buch deckt alle Bereich der Entwicklung von Datenbankanwendungen ab.
Es geht dort um XML,MS SQL Server aber auch allgemeine Datenbank ansprachen. Toll
ist dass der Autor auch immer wieder vermerkt was MS SQL spezifisch ist und welche
funktionen allgemein gültig sind
- Das vierte Buch "Pro .NET 2.0 Windows Forms..." ist schon ein etwas anspruchsvolleres
Bcuh und geht auf die Themen Custom Control Optimizing GUI etc. ein und ist für alle
interessant die schon etwas erfahrung haben und eine Ansprechende GUI anbieten möchten.
-Für alle die es sich "trauen" sei das letzte Buch "Microsoft .NET Framework Programmierung
in C#" empfohlen. Dieses Buch gibt tiefgehendes Know über die Funktionsweisen des
Frameworks an sich. Achtung hier ist Hintergrundwissen Vorraussetzung!
BE Gantt Development
06.08.2007 16:55:52
|
Boas Enkler
Es hat sich wieder einiges am Gantt Control getan.
Der Schwerpunkt der Entwicklung lag auf dem Zugänglichen machen interner Events. So
kann man z.bsp. Eingreifen wenn eine Bar oder ein Item für das Zeichnen vorgeladen
werden oder man kann reagieren wenn sich der sichtbare Bereich des Gantts ändert.
So ist es möglich Daten on Demand nachzuladen.
Der andere Schwerpunkt lag im Verbessern der Useability, so kann man nun auch bei
einzelnen Zeilen Hintergrundfarbe etc. bestimmen.
Hier mal ein Screenshot mit Farbigen Hintergrund Zeile
Weitehrin gibt es inzwischen auch definierbare Tooltips je bar.
Ein nettes kleines Feature, dass man im mom leider nicht auf dem Screenshot sieht
sind kleine hilfslinien die in der Zeitleiste angezeigt werden sobald man eine Bar
via Mouse & Drag verschiebt oder Sized ,so dass man immer sieht wie weit die Bar
ausgedeht ist.
Ansonsten habe ich noch 2 Controls in das GanttChart unten reingepackt, die es ermöglcihen
auf der Zeitachse zu zoomen. Sprich den Abstand zwischen den Stunden btw. Tage
einzustellen.
In meinem nächsten Posting folgen dann Beispielcodes wie das Gantt Control mit Daten
beladen wird.
"Add Service Reference" in Visual Studio 2008 beta 2
01.08.2007 19:02:20
|
Mathias Raacke
Gerade habe ich zufällig diesen neuen Button im "Add Service Reference"-Dialog bemerkt:
Wenn ich einen "Advanced"-Button sehe den ich noch nicht kenne muss ich da immer einfach
drauf klicken :). So sieht das dann aus:
Sehr viele neue Optionen direkt aus Visual Studio verfügbar - sehr schön! Vor allem
die Option "Reuse types in referenced assemblies" könnte wirklich praktisch sein. Fehlt
eigentlich nur noch ein passendes Projekt, damit ich mich mal so richtig in der Praxis
mit 3.5 und Visual Studio 2008 beschäftigen kann.