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.
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
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
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.
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?
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.
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
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...
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
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#)?
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
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?
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.
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);
Schreib dir doch ne Batch Datei die vo dem Build (PreBuild Action) die DLLs in das passende Verzeichnis kpoiert.
Das ist doch am einfachsten
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.
Hallo,
ich verwende bei mir folgende 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.
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
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.
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?
Danke das ist genau das was ich gesucht habe!
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
Gibt es da noch die Möglichkeit das direkt in Visual Studio einzustellen, dass bestimmte Klassen in je eine eigene DLL erzeugt werden?
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)
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.
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?
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.
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...
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
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?
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...
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?
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?
Danke für den Tipp, werd ich so machen.!
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...
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>
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.
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.
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.
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.
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>();
}
}
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
Eine gute Übersicht über ein paar DesignPatterns mit Beispielen in c# und grafischen Notationen findest du auch hier, allerdings nur kurz und knapp:
Ist allerdings auf Englisch, aber trotzdem gut verständlich.
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.
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.
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
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
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.
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.
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?
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¶m2=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);