Laden...
S
Siedlerchr myCSharp.de - Member
Fachinformatiker Anwendungsentwicklung NRW Dabei seit 07.11.2009 178 Beiträge
Benutzerbeschreibung

Forenbeiträge von Siedlerchr Ingesamt 178 Beiträge

25.07.2012 - 16:44 Uhr

Noch ein Tipp:

Versuch die COM- Komponente möglichst als TLB-Datei zu exportieren und über TLBImp in VS zu imporiteren , dann hast du den Vorteil das du deine Anwendung auf jedem Rechner kompilieren kannst, ohne das die COM Komponente installiert sein muss.

Type Library Importer (MSDN)

11.07.2012 - 09:41 Uhr

Genau das war mein Problem. Habe das Problem jetzt gelöst, in dem ich die Daten vorher nochmal in eine neue Liste übertrag und diese dann komplett ans DGV hänge.
So klappt es. Ist zwar performancemäßig nicht so toll, aber erstmal ein Anfang

Gruß
Siedlerchr

10.07.2012 - 21:32 Uhr

Was denn nun, Virtual mode oder DataSource, beides macht keinen sinn.

o.O - Hm, dann muss ich mich doch nochmal genauer einlesen. Ich hatte das bisher so verstanden, dass das Virtual Mode nur dann funktioniert, wenn ich auch ne DataSource habe und meine Items DataBound sind

10.07.2012 - 12:45 Uhr

Hallo zusammen,

ich habe ne SortableBindingList an ein DGV gehängt. Das funktioniert auch soweit alles.
Das DGV ist im Virtual Mode und da kriege ich beim sortieren - teilweise- Fehlermeldungen:

Fehlermeldung:

Standard-Fehlerdialogfeld für DataGridView

DataGridView-Ausnahme:
System.IndexOutOfRangeException: Der Index 6 hat keinen Wert.

bei System.Windows.Forms.CurrencyManager.get_Item(Int32 index)

bei System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex

Behandeln Sie das DataError-Ereignis, um dieses Standarddialogfeld zu ersetzen.

Das eiinzige was mir zu diesem Fehler einfällt, ist das das für jedes Element im DGV/Liste kommt, der IndexWert entspricht der Row.

Was vielleicht noch interessant ist: Die Liste die als DataSource am DGV hängt wird von einem Thread in 1000 Schritten befüllt und nach jedem Schritt wird die DataSource wieder auf die Liste gesetzt.

Hier noch mein CellValueNeeded Event:

private void dgvDeleteRuns_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            e.Value = allRuns[e.RowIndex];
        }

Wenn ich die Liste z.B: per Where einschränke und das Ergebnis als neue Liste ans DGV hänge (auch eine SortableBindingList), dann funktioniert das Sortieren einwandfrei....

Ich habe auch schon probiert. die LIste ans DGV als DataSource zu setzen, wenn alle Daten geladen sind. Aber da geht das sortieren ebenfalls nicht.

Hat jemand ne Idee warum das nur bei alllen nicht geht? Ich hab mit dem VirtaulMode noch nicht so viel Erfahrung gesammelt.

05.07.2012 - 17:28 Uhr

Hallo zusammen,

kann man die Reihenfolge der Properties zur Laufzeit festlegen. Ich habe eine Klasse die von einem Interface erbt. Egal wie ich die Properties jetzt in die Klasse einfüge, die Properties aus dem Interface sollen als erstes kommen und die Anordung soll auch gleich sein.

BNsp: Reihenfolge aus dem Interface


 public interface IRunInformation
    {
      Guid RunId { get; set; }
        decimal Count { get; set; }
}

Klasse

 public class CustomerRunInfo: IRunInformation
    {
 public string Name {get;set;}
  public  decimal Count { get; set; }
  public   Guid RunId { get; set; }

}

Wenn ich jetzt eine Liste vom Typ des Interfaces erstelle habe ich ja meien gewünschte Reihenfolge, wenn ich jetzt allerdings eine Liste vom Typ der Klasse Erstelle habe ich die Reihenfolge der Klasse, die anders ist als die des Interfaces.
Kann man sagen: Die Properties die vom Interface kommen sollen a) als erstes und b) in der Reihenfolge wie sie im Interface definiert sind?

Hintegrund ist das ich die beiden Listen an ein DGV mit DataSource hänge -> Die Spalten werden da ja automatisch erzeugt. Oder gibt es hier vielleicht ne Möglichkeit die Reihenfolge zu beinflussen?

04.07.2012 - 22:29 Uhr

Hallo,

ich kanns leider gerade nich testen, erst morgen wieder, aber ich meine das hängt mit der Eigenschaft AuoSize ( DataGridViewAutoSizeColumnMode) zusammen.

Wenn ich das auf MSDN richtig gelesen habe ist das Resizen bei dem Modus "AllCells" deaktiviert.
Ich verwende eigentlich immer Fill und habe damit auch bei DataBinding Geschichten bisher noch keine Probleme mit dem Resizen gehabt.

Nähere Infos gibt es hier:
MSDN: DataGridViewAutoSizeColumnMode-Enumeration

Ich würds ansonsten nochmal morgen früh testen, ansonsten einfach mal mit der Eigenschaft rumspieln. Wie gesagt, bei Fill hatte ich eig noch nie Probleme.

04.07.2012 - 22:10 Uhr

Leider erscheint im Datagridview kein Pfeil um die Spaltenbreite von Hand anzupassen.

Für die Spaltenbreite gibt es keinen Pfeil, du klickst entweder Doppelt auf eine Spalte und der nimmt automatisch die Spaltenbreite oder du klickst zwischen zwei Spalten und kannst dann mit gedrückter
Maus die Spaltenbreite ändern.

Nicht verwechseln mit dem "Sort Glyph", dem Pfeil für die sortieren wie hier (siehe Anhang)

Das Sortieren geht nur bei Datenquellen die die Sort-Methode überschreiben, nähere Infos dazu gibt es hier:
MSDN: ColumnSortMode

04.07.2012 - 21:42 Uhr

Hallo zusammen,

ich bin auf der Suche nach mehren Tutorials/Bücchern etc in denen das Erstellen von Extensions für Visual Studio 2010 erklärt wird.

Ich habe bereits den Walkthrough von MSDN gemacht und mich dort ein wenig eingelesen, muss aber sagen, dass das jetzt nicht so hilfreich war...
Die API-Referenz ist leider auch ziemlich dürftig was das angeht...

Kennt da jemand noch Tutorials oder ggf Bücher oder hat Tipps/Empfehlen für das Erstellen von Visual Studio Extensions?

Möglichst wo das ganze mal irgendwie zusammenhängend beschrieben...

04.07.2012 - 17:40 Uhr

Ja das geht, in dem du den Benutzer einfach als Parameter und schickst ein Prepared Statement ab.

Vielleicht mal folgendes als Denkanstoß:



string qry = "select Name, Adresse  from Mitfahrzentrale.Benutzer where Benutzer.Name  = ?"

        OdbcCommand cmd = new OdbcCommand(qry, conn);
   cmd.Parameters.AddWithValue("user",Environment.UserName)
 var reader = reader = cmd.ExecuteReader())
while (reader.Read())
                    {
//Ergebnismenge durchlaufen und die Werte der Spalten abrufen...
}

Entweder baust du das ganze mit dem DataTable/DataSet oder du erstellt dir einfach eine Liste mit den Objekten und hängst die an das DGV.
Dazu gibt es hier jede Menge Infos.

Ich habe das in dem o.g. Beispiel mal über eine einfach ODBC-Abfrage gemacht, beim SQL Server wirst du vermutlich OleDbCommand oder ähnliches verwenden
Nähere Infos: MSDN: DBCommand

27.06.2012 - 13:24 Uhr

Hallo,

auf Stackoverflow gibt es eine ähnliche Frage, in der auch Beispiele gepostet worden sind.
Vielleicht hiflt dir das ja weiter:
Stackoverflow - How do you kill a process for a particular user in .NET (C#)?

27.06.2012 - 12:23 Uhr

Hallo herbivore,

danke für die Antwort!

Die absoluten Zahlen beziehen sich immer nur auf den jeweiligen Container

Ich hatte das anders in Erinnerung gehabt, ich war iwie davon ausgegangen das das pro Form/Window ist.
Habs jetzt mit einem TableLayoutPanel umgesetzt. Klappt jetzt mit der TabOrder

27.06.2012 - 09:56 Uhr

Hallo zusammen,

ich hab ein kleines Problem mit der Tab-Reihenfolge meiner Controls.
Ich habe nen UserControl auf dem mehrere Textboxen und daneben jeweils einen Button.
Die Buttons sind untereinander auf einem FlowLayoutPanel angeordnet.

Ich habe die TabIndex-Werte entsprechend eingetrage, dass er von links nach Rechts gehen soll (Textbox-->Button).
Mein Problem ist jetzt, dass die Tab-Reihenfolge ignoriert wird, er springt von der 1. Textbox nicht zum Button, sondern auf die nächste Textbox in der nächsten Zeile.
Das FlowLayoutPanel hat in dem Fall einen TabIndex der größer als alle anderen sind.

Jetzt habe ich versucht dem FlowLayoutPanel den TabIndex 2 zu geben. Das klappt, er selektiert dann den 1. Button
Allerdings geht er jetzt in dem FlowLayoutPanel weiter von oben nach unten, er springt zum nächsten Button, obwohl in der TabOrder eigentlich die nächste TextBox kommen sollte.

Zur veranschaulichung habe ich mal einen Screenshot gemacht.
Frage: Wie kriege ich die TabOrder in die richtige Reihenfolge, sodass er von links nach rechts geht?

25.05.2012 - 18:25 Uhr

Hi,

die Lösung hatte ich auch schon, nur es hatte nicht bei mir funktioniert.
Ich habe den Fehler jetzt gefunden, es lag an dem

System.Type.EmptyTypes)

bei dem GetMethod. Wenn man das weglässt, dann funktioniert es.

25.05.2012 - 17:06 Uhr

Hallo zusammen,

ich rufe per Expression.call auf und will dort die Methode string.Contains verwenden.
Mein Problem ist allerdings, wie ich contains die Parameter übergebe.
Das habe ich noch nicht raus bekommen. Ich habe mir die Expression.Call Überladungen auch schon angeschaut, sehe da aber nichts passendes.

Vielleicht hat ja von euch jemand eine Idee. Das wäre sehr hilfreich.

So sieht mein Code bisher aus, ich rufe die Methode ToUpper von string auf.

string constvalue = "TEST";
			Console.WriteLine ("Hello World!");

			List<User> users = new List<User> {  new User { UserLogin = "test", UserName = "ABC"}, 
												  new User{ UserName = "DEFG", UserLogin = "GHI"}};
		
			
			IQueryable<User> queryableData = users.AsQueryable<User>();
			
			ParameterExpression  p = Expression.Parameter(typeof(User),"s");
			ConstantExpression five = Expression.Constant(constvalue);
			
			Expression left = Expression.Property(p,"UserLogin");
			var exprToUpper =	Expression.Call(left,typeof(string).GetMethod("ToUpper", System.Type.EmptyTypes));
			
		   Expression e1 = Expression.Equal(exprToUpper,five);
			
	       MethodCallExpression whereCallExpression = Expression.Call(
                typeof(Queryable),
                "Where",
                new Type[] { queryableData.ElementType },
                queryableData.Expression,
                Expression.Lambda<Func<User, bool>>(e1, new ParameterExpression[] { p}));
		
	
			
			 IQueryable<User> results = queryableData.Provider.CreateQuery<User>(whereCallExpression);
23.05.2012 - 09:08 Uhr

Schreib dir doch ne Batch Datei die vo dem Build (PreBuild Action) die DLLs in das passende Verzeichnis kpoiert.

Das ist doch am einfachsten

22.05.2012 - 14:33 Uhr

Kannst du mir noch sagen, was du mit %Path% meinst?

Er meint die Umgebungsvariable PATH, die du unter Systemsteuerung ändern kannst.

Tipp einfach mal in eine CMD das Wort "path" (ohne Anführungszeichen ein) und du siehst schonmal alles was da bisher drin steht.

21.05.2012 - 12:49 Uhr

Hallo,

ich verwende bei mir folgende SortableBindingList

SortableBindingLIst

Interessant dabei dürfte für dich der Abschnitt hier sein:

private void CreateOrderByMethod(PropertyDescriptor prop, 
                 string orderByMethodName, string cacheKey) {

        /*
         Create a generic method implementation for IEnumerable<T>.
         Cache it.
        */

        var sourceParameter = Expression.Parameter(typeof(List<T>), "source");
        var lambdaParameter = Expression.Parameter(typeof(T), "lambdaParameter");
        var accesedMember = typeof(T).GetProperty(prop.Name);
        var propertySelectorLambda =
            Expression.Lambda(Expression.MakeMemberAccess(lambdaParameter, 
                              accesedMember), lambdaParameter);
        var orderByMethod = typeof(Enumerable).GetMethods()
                                      .Where(a => a.Name == orderByMethodName &&
                                                   a.GetParameters().Length == 2)
                                      .Single()
                                      .MakeGenericMethod(typeof(T), prop.PropertyType);

        var orderByExpression = Expression.Lambda<Func<List<T>, IEnumerable<T>>>(
                                    Expression.Call(orderByMethod,
                                            new Expression[] { sourceParameter, 
                                                               propertySelectorLambda }),
                                            sourceParameter);

        cachedOrderByExpressions.Add(cacheKey, orderByExpression.Compile());
    }

In a Nutshell

If, for instance, you create a MySortableBindingList<Sale> and sort on the Customer property, an expression that conceptually looks something like Enumerable.OrderBy<Sale>(originalList, a => a.Customer) will be created and used to do the sorting.

Das könnte doch eigentlich genau das sein was du brauchst. Der Code erzeugt dynamisch eine Lambda Expression, wenn ich das richtig verstanden habe und sortiert dann damit.

21.05.2012 - 11:35 Uhr

Eine normale BindingLst kannst du im DGV aber nicht sortieren. Hatte vor kurzem das selbe Problem.
Für das Sortieren über das Datagrid brauchst du eine SortableBindingLIst wie z.B. Hier:
Sortable BindingList

Für das Filtern würde ich mir mal folgendes anschauen, das erzeugt dynamisch eine Filteroberfläche mit allen Spalten.

Dynamic DataGridView filtering in C#

Das jeweilige Filtern habe ich dann für alle Spalten jeweils einzeln gemacht.

 userList =
                                    new SortableBindingList<Benutzer>(
                                        userList.Where(x => x.Name1.ToUpperInvariant().StartsWith(
                                            f1.Value.ToUpperInvariant())));
                                dgvData.DataSource = userList;

Da hatte ich auch keine gescheite Lösung für gefunden.

Hoffe das bringt dich vielleicht schonmal etwas weiter.

//Edit: Link korrigiert

28.03.2012 - 15:36 Uhr

Hi,

ich habe da mal mit deinen Vorschlägen rumgetestet, funktioniert so leider nicht.
Zum einen werden da wieder für alle die Buttons angezeigt und zum Anderen wird der Button jeweils nur so halb angezeigt.

Ich habe mir jetzt nen Workaround geschaffen:


   if  (dgvProjectInfo.CurrentCell.OwningColumn == dgvProjectInfo.Columns["ProjectInfoProjectCode"])
            {
                ShowProjectCodesWithButton(dgvProjectInfo);
            }
            else
            {
dgvProjectInfo.EditingPanel.Controls.RemoveByKey("btnProjectCodes");
 
            }


So entferne ich einfach den Button bei den Spalten bei denen ich den nicht benötige, bei der anderen Spalte erzeuge ich ihn dann neu.

28.03.2012 - 13:56 Uhr

Hallo zusammen,

ich habe folgendes praktisches gefunden:
DataGridView-Zelle mit Browse-Button
Dort wird in einer Zelle ein Browse Button hinzugefügt.
Die relevante Stelle ist die hier:

 void dgv_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
    {
      if (dgv.CurrentCell.ColumnIndex != dt.LinkColumn.Ordinal) return;
      Button btn = new Button(); btn.Dock = DockStyle.Right;
      btn.Name = "btnOpen"; btn.Text = "..."; btn.Width = 25;
      if (!dgv.EditingPanel.Controls.ContainsKey(btn.Name))
        dgv.EditingPanel.Controls.Add(btn);
      btn.Click += new EventHandler(btn_Click);
      btn.BringToFront();
    }

Das funktioniert soweit
Allerdings wird mir dieser "Browse Button" für jede Spalte angzeigt, obwohl nicht beabsichtigt.

Ich habe das auch schon mit anderen Events wie CellEnter oder CellClick getestet und dort die Spalte abgefragt, aber er fügt es trotzdem für jede Spalte ein.
Besteht die Chance, das man das hinbekommt, dass das nur bei 1 Spalte angezeigt wird?

17.11.2011 - 19:16 Uhr

Danke das ist genau das was ich gesucht habe!

16.11.2011 - 15:29 Uhr

Hallo zusammen,

gitb es in Visual Studio die Möglichhkeit zu sagen, dass ich jeweils bestimmte Klassen (die ein Plugin-Interface implementieren) in jeweils eine eigene DLL haben will?
Bislnag erzeugt Visual Studio ja für jedes Projekt eine DLL.
Ich hätte aber gern eine DLL pro Klasse.

Ich habe bisher nur die Möglichkeit das per Kommandozeile zu machen wie hier beschrieben:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs

MSDN: Erstellen einer DLL

Gibt es da noch die Möglichkeit das direkt in Visual Studio einzustellen, dass bestimmte Klassen in je eine eigene DLL erzeugt werden?

14.07.2011 - 14:30 Uhr

Also such einfach mal nach IoC und Depency Inejction bei Google, da findest du jede Menge frei verfügbare Informationen: Einen guten Einstieg bietet das Tutorial bei Ninject (ein Container für Depency Injection)

Dependency Injection By Hand

12.07.2011 - 22:18 Uhr

Ja das sieht nach einer relativ guten Lösung aus, das könnte genau das sein was ich brauche..

Danke erstmal für den Tipp.

12.07.2011 - 19:23 Uhr

Danke erstmal für die Antworten, aber ich glaube ich habe mich evtl ein wenig unklar ausgedrückt:

Ich beutze eine LINQ Abfrage mit select NEW zum Abfragen von Daten aus der eigentlichen Liste. Die kann ich aber nicht als DataSource nehmen, weil ich dann nicht die Daten in der "schönen" Form habe wie hier.
Letzendlich geht es mir nur um die Anzeige, es sind keine weiteren daten die hinzugefügt werden oder so, die Daten die ich Abfrage sind alle in der

   var qry = (from myacc in accList //Ursprungsliste
                       select new AccountHosterView
                       {
                           Hostername = myacc.Hoster.Name, //Hoster ist ein Eigenes Objekt das einem Account objekt zugeordnet wird

                           Username = myacc.Username,
                           Password = myacc.Password,
                          ........

                       }).ToList();

Als Datasource des DGV habe ich dann derzeit eine BindingList vom Typ BindingList<AccountHosterHiew>.
Ichn suche im Prinzip eine Möglichkeit, dass wenn ich im DGV was ändere an der Anzeige, die dahinterliegenden Daten mitgeändert werden.
Denn wenn ich jetzt z.B. was ändere im DGV dann würde die Änderung ja nur in der BindingList statfinden und nicht in der eigentlichen Account Liste.

Wie würd ich sowas hinbekommen oder ist mein ansatz evtl falsch?

05.07.2011 - 21:40 Uhr

Danke erstmal für die schnelle Antwort. Könntest du etwas konkreter werden wie du das genau meinst oder vielleicht mal nen Bsp. Ansatz zeigen?
Ich kann das so noch nicht nachvollziehen wie du das meinst.

05.07.2011 - 21:34 Uhr

Es gibt zusätzlich in den Optionen auch noch die Möglichkeit "Umfassende visuelle Clientdarstellung" zu aktivieren/deaktivieren.

Das hat bei mir auf meinem Netbook jedenfalls ein bisschen Performance gebracht...

05.07.2011 - 21:17 Uhr

Hallo,

ich habe mal ne Frage bezüglich dem Mitgeben von Änderungen einer Collection an eine Andere.

Ich habe ne Liste von Objekten vom Typ A. Derzeit habe ich es aber so dass ich auf diese Liste eine LINQ Abfrage mache, das ganze in ein BindingList und das als DataSource im DGV angebe.

Die Änderungen werden ja jetzt auch schön in die BindingList übernommen. Meine Frage ist jetzt, wie kriege ich die Änderungen der BindingList am Besten mit der eigentlichen Collection synchronisiert kriege.

Jetzt habe ich mich mal ein bisschen schlau gemacht und gefunden zum einen das ListChanged Ereignis und zum Ändern das INotifyPropertyChanged der Objekte in der Liste. Was mir jetzt nicht so ganz klar ist, wie ich dann die andere Urprungscollection aktualisiere. Wie würde man sowas umsetzen?
Oder gibt es vielleicht nen anderen Ansatz um das zu lösen

04.07.2011 - 23:18 Uhr

Vielen vielen dank, es macht genau das was es soll.

Jetzt bin ich mir nur noch nicht ganz sicher, ob ich richtig verstanden habe wie das abläuft:

Also zuerst wird für die Elemente der Collection die erste Bedinung in der Estension Method mit dem "orgininalem" FirstOrDefault ausgewertet, ob die erfüllt ist oder nicht, dann wird ggf. die DefaultMethode aufgerufen.

Und das Func<T> ist doch letzendlich ne Art von delegate der dann auf eine Methode zeugt oder?

04.07.2011 - 19:36 Uhr

Hallo zusammen,

ich habe da mal ne Frage bezüglich DefaultIfEmpty() bei einem IEnumerable im Zusammnenhang mit First()

Ich habe hier eine Methode die mir den ersten Wert einer Liste geben soll oder bei NULL einen neuen erzeugen (GetNewEmptyFreeAccount)
bei accList handelt es sich um ein List<IAccount> Objekt.


 public IAccount GetFirstActiveAccount(string hoster)
        {

            var acc = accList.Where(x => x.Hoster.Name == hoster && x.Active == true).DefaultIfEmpty(GetNewEmptyFreeAccount(hoster)).First();
            return acc;
        }

Das Problem ist jetzt, dass, obwohl etwas enthalten ist, der die Methode aus DefaultIFEmpty aufruft.
Wenn ich das richtig verstanden liegt das hieran:

Zitat von: Enumerable.DefaultIfEmpty Abschnitt Hinweise
Diese Methode wird mit verzögerter Ausführung implementiert. Der Wert der sofortigen Rückgabe ist ein Objekt, in dem alle zum Ausführen der Aktion erforderlichen Informationen gespeichert werden. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch den direkten Aufruf der zugehörigen GetEnumerator-Methode oder mithilfe von foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

Meine Frage ist jetzt, kann ich das irgendwie umändern, sodass es funktionieren würde wie ich es mir vorstelle?
Also dass das DefaultIfEmpty die Methpode nicht jedesmal aufruft, sondern wirklich dann wenn die Collection leer ist?
Was muss ich dafür machen, habe schon überlegt aber mir ist noch kein Gedanke gekommen...

28.06.2011 - 17:38 Uhr

hallo,

was für Ribbons benutzt du denn? Da gibts ja die unterschiedlichsten Implementationen.

Also konkret habe ich einfach nen Outlook-Addin für Outlook 2010 erstellt und dem habe ich dann son Ribbon (Menüband visuell hinzugefügt)

Bei den Controls die ich hinzufügen kann gibt es keinen Datepicker (wieso eig nicht?)
Also es handelt sich da wohl um die Standard Controls.

Gibt es denn da ne Erweiterung oder sowas?

28.06.2011 - 13:30 Uhr

Hallo zusammen,

da es anscheinend keine Möglichkeit für einen Datepicker in Den Office Ribbons gibt, den man selber benutzen kann, hier die Frage: Gibt es da eine Alternative oder sowas?

Oder habt ihr evtl nen Alternativvorschlag ein Von-Bis Datum ohne Datepicker zu realisieren?

05.06.2011 - 18:00 Uhr

Danke für den Tipp, werd ich so machen.!

05.06.2011 - 13:47 Uhr

Hallo zusammen,

ich habe eine Linq Abfrage, wobei accList vom Typ List<IAccount> ist.

 var qry = (from myacc in accList
                       select new
                       {
                           myacc.Hoster.Name,
                           myacc.Username,
                           myacc.Password,
                           myacc.Active
                       }).ToList();

die ich quasi als Datasource an ein Datagridview übergebe. Soweit kein Problem.
Allerdings habe ich die daten jetzt quasi nur read only im DGV drin stehen, was bedeutet das löschen nicht möglich ist.
Auf Stackoverflow habe ich dazu folgendes gefunden:
BindingList and LINQ?

Dort wir beschrieben wie ich das in eine BindingList umwandeln kann, allerdings kann ich das nicht direkt umsetzen, da dort bei new in der Linq Abfrage das Objekt angegeben wird, ich habe aber ein Interface IAccount das ich da nicht verwenden kann...
Habs auch schon mit einem Cast<IAccount> propiert, gibt dann aber zur Laufzeit die Fehlermeldung das ich nicht von AnonymerTyp in IAccount konvertieren kann...

Hat jemand ne Idee wie man das Problem lösen könnte, sodass ich das ganze tatsälich in eine BindingList reinkriege oder anders bearbeiten könnte...

30.05.2011 - 10:31 Uhr

Ah vielen Dank für den Hinweis! Da hab ich gar nicht dran gedacht gehabt.

Habs jetzt entsprechend gelöst, habe anstatt der IEnuermable<AppointmentItems> ein Items eingesetzt und das .OfType weggelassen. in einer LINQ-Abfrage verwende ich dann ein .ofType<AppointmentItem>

30.05.2011 - 10:00 Uhr

Der Fehler rührt daher, dass du als Zeilframework .Net 4.0 - client (abgespeckte Version) angegeben hast und in der ist die System.Web - Geshichte nicht enthalten.

Du musst in den Build-Eigenschaften das Framework auf .Net 4.0 stellen, dann sollte es damit auch tun.

30.05.2011 - 09:56 Uhr

Da du vermutlich immer nur ein GET Request machst und die Webseiten ihre Standardheader zurückgegeben sind diese gecached,so würd ich das jetzt vermuten, genau sagen kann ich es dir nicht.

Probier doch mal mit der CachePolicy rumzuspielen, vllt mal deaktivieren und dann testen ob die anderen Seiten ebenfalls schneller gehen.
Hängt vielleicht auch von der Größe der Seite ab.

30.05.2011 - 09:52 Uhr

Du gibst einzelne Elemente zurück, nicht IEnumerable

Wieso denn das?
Wenn ich das .OfType<AppointmentItem> weglasse bekomme ich ebenfalls eine IEnumerable zurück ( in dem Falle IEnumerable<Items> und auch .OfType gibt mir eine IEnumerable zurückmit gefiltert nach dem Typ denn ich angebe.

Was ist denn daran nun falsch? Ich verstehs grad nicht.

30.05.2011 - 09:36 Uhr

Das .Net Framework verwendet caching und wenn du mehrmals Abfragen zur selben Seite machst kannst der die infos aussem Cache laden.

Man kann diese CachePolicy sogar einstellen:
MSDN- CachePolicy

Zitat aus der Doku:

Die aktuelle Cacherichtlinie und das Vorhandensein der angeforderten Ressource im Cache bestimmen, ob eine Antwort aus dem Cache abgerufen werden kann. Durch die Verwendung zwischengespeicherter Antworten wird i. d. R. die Anwendungsleistung erhöht. Jedoch besteht die Gefahr, dass die Antwort im Cache nicht mit der Antwort auf dem Server übereinstimmt.

30.05.2011 - 09:11 Uhr

Hallo zusammen,

ich hänge grade an einer Sache fest, ich habe mir eine Methode geschrieben, die mir alle AppointmentItems aus Outlook als IEnumerable<AppointmentItem> zurückgeben soll, allerdings krieg ich immer den Fehler bei einer Filterung von Items per OfType<>> Fehlermeldung:

Der Typ "System.Collections.Generic.IEnumerable<Microsoft.Office.Interop.Outlook.AppointmentItem>" kann nicht implizit in "Microsoft.Office.Interop.Outlook.AppointmentItem" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

Ich habe schon CAST<> und AsEnumerable<> ausprobiert, hat leider nicht geholfen, derzeit bin ich ein wenig ratlos warum die Konvertierung nicht klappt...

Folder.Items ist eine Collection aller OutlookItems (Calender, Mail etc), ich will halt nur AppiointmentItems haben.

Wo ist mein Denkfehler?
Hier mal der Code:

   public static IEnumerable<AppointmentItem> GetAllAppointmentItems(Folders folders)
        {
            foreach (Folder folder in folders)
            {
                foreach (Folder subfolder in GetAllAppointmentItems(folder.Folders))
                {
                    yield return subfolder.Items.OfType<AppointmentItem>();
                 }
                yield return folder.Items.OfType<AppointmentItem>();
            }
   
        }

26.04.2011 - 17:49 Uhr

Du musst wahrscheinlich noch den DataMember mit angeben, das ist z.B. eine ID-Spalte einer Tabelle aus dem Dataset, während DisplayMember nur angibt welche Spalte angezeigt wird.

Am einfachsten ist es du machst das DataBinding bein WinForms über den Assistenten

26.04.2011 - 16:26 Uhr

Eine gute Übersicht über ein paar DesignPatterns mit Beispielen in c# und grafischen Notationen findest du auch hier, allerdings nur kurz und knapp:

Design Pattern

Ist allerdings auf Englisch, aber trotzdem gut verständlich.

22.04.2011 - 20:09 Uhr

Ich hab schon auf mehreren Seiten im Internet was über das Gerücht .Net 4.5 gelesen.
Unter anderem auf heise Developer:
.Net 4.5?

Mir war bisher nur bekannt, dass es eine Version 5.0 gibt...

Ich würd dieses Thema mal als Sammelquelle für Informationen/Gerüchte übet .Net 4.5 / .Net 5.0 nutzen.

Also wenn jemand Infos dazu hat, dann einfach posten.

05.04.2011 - 17:37 Uhr

Eine andere Vermutung, hast du in dem Ressourcen Editor automatische Code Generierung aktiviert oder deaktiviert?

Nur wenn die aktiviert ist, kannst du das auch nutzen, die andere Sache ist das du manuell dieses resgen durchführen musst.

05.04.2011 - 17:32 Uhr

Ich hab bei mir in der Firma auch schon mit COM gearbeitet, das ist nicht so schwer.

Also vorab der Hinweis, sobald du mit COM arbeitest, musst du dein Projekt auf x86 umstellen.

Und normalerweise kannst du die COM-Schnittstelle wie eine normale Klasse/Assembly in deinem Projekt benutzen.
Neben den ganzen Interfaces müsste da auch eine Klasse definiert sein, von der erstellst du dir dann ein Objekt und du kannst dann ganz normal damit arbeiten und z.B. Methoden aufrufen.

Noch ein Hinweis, du solltest dir mit dem tool tlbimp.exe aus dem .NET Framework vorab eine Assembly aus der COM Library generieren, damit das auch die Leute kompilieren können die die COM Referenz nicht auf ihrem Rechner haben:

Type Library Importer (Tlbimp.exe)

Ich hoffe das bringt dich erstmal weiter

04.04.2011 - 12:44 Uhr

TeamDrive scheint ganz gut zu sein für meine Zwecke, ich werde das mal testen.
Das mit Git werde ich auch mal testen, ich bin mir aber noch nicht sicher, ob das nicht auf dauer ein wenig umständlich ist.

Gruß
Siedlerchr

04.04.2011 - 11:00 Uhr

ja, aber geht das dann nicht als GET mit, wenn ich das mit ? dahinter schicke

Nein, weil du ja als Methode POST angibst, zur Unterscheidung lies vielleicht mal:

Unterschiede GET/POST (englisch)

Aber noch ein Hinweis:

Die WebClient.UploadFile-Methode (System.Net) kennst du?

Bei einfachen Dingen geht das, aber nicht bei komplexeren Forms mit mehreren Feldern.
Da hab ich schon mal mit rumexperimentiert.

04.04.2011 - 10:17 Uhr

Ich brauch kein Source Code Verwaltungssystem wie GitHub, ich suche sowas direkt für Office Dokument, was mir Änderungen direkt im Word Dokument anzeigt.

Daher ja uach der Hinweis auf Google Cloud Connect.

04.04.2011 - 09:52 Uhr

Hi,

ich suche ein Dokumentenversionnierunsystemfür z.B. Office Dokumente oder Power Point Präsenationen.

Im Grund genommen würd ich gerne was haben, was ich mit meheren Leuten synchronisieren kann und dann auch eine Versionshistorie haben kann und jeweils die Ändeurngen nachverfolgen lasse.

Derzeit verwende ich MS Office 2010 und Google Cloud Connect zum synchronisieren, das ist aber nicht so optimal, da ich zwar das Dokument syncen kann zu Google aber andere Leute das Dokument dann wieder nicht von Google -> Office

Also was ich suche ist halt eine Möglichkeit in beide Richtungen zu syncen, also in dem
Sinne : Person A <--> (Internet) <--> B jeweils bei einem Dokument.

Kennt jemand einen Service der sowas anbietet oder gibt es andere Möglichkeiten?

04.04.2011 - 09:11 Uhr

Du hast mehrere Möglichkeiten, entweder gibst du die Parameter direkt mit in der Adresse an die du übergibs, also z.B.

google.de?param=value&param2=value&uid=2asdasd

Wenn du jeweils unterschiedlich viele Parameter mit geben willst, empfiehlt es sich z.B. eine NameValueCollection oder ein Dictionary mit den Parametern und den entsprechenden Wrten zu übergeben.
Die musst du dementsprechend als bytes mit in den Request Stream schreiben.

Ich hab hier mal ein Beispiel, das ich verwende um unterschiedlich viele Parameter-Wertpaare mitzusenden.

  string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
        byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
        wr.ContentType = "multipart/form-data; boundary=" + boundary;
        wr.Method = "POST";
        wr.KeepAlive = true;
        wr.Credentials = System.Net.CredentialCache.DefaultCredentials;

        Stream rs = wr.GetRequestStream();

        string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
        foreach (string key in nvc.Keys) //nvc ist vom Typ NameValueCollection
        {
            rs.Write(boundarybytes, 0, boundarybytes.Length);
            string formitem = string.Format(formdataTemplate, key, nvc[key]);
            byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(formitem);
            rs.Write(formitembytes, 0, formitembytes.Length);
        }
        rs.Write(boundarybytes, 0, boundarybytes.Length);