| 

.NET C# Java Javascript Exception

2
Hallo,

ich habe folgendes Problem: Ich habe 2 Listen, einmal "Veranstaltungen" mit div. Feldern für Veranstaltungsdetails und einmal "Teilnehmer" mit den Spalten "Name" in der der aktuelle Nutzer (
currentUser.ID.ToString() + ";#" + currentUser.LoginName.ToString()
) und der aktuelle Veranstaltungstitel beim klick auf einen Button "anmelden" in einem visuellen Webpart über der Dispform (via runelevatedprivileges) hinzugefügt wird. Die aktuellen Werte für das Listenelement bekomme ich über
currVstItem = (SPListItem)SPContext.Current.Item;
. Entsprechend lasse ich bei meinem Webpart prüfen, ob der Nutzer schon in der Liste "Teilnehmer" aufgeführt ist mittels folgendem linq-query:
bool foundUsers = (from SPListItem item in tn.Items
where item["Name"].ToString() == userString
&& item["Veranstaltung"].ToString() == currVstItem.Title
select item).Count() > 0;

...und füge daraufhin einen Button "anmelden" oder "abmelden" dem Webpart (über Visible) beim page_load hinzu.

Probleme ergeben sich dabei natürlich, wenn der Titel einer Veranstaltung später von einem Verwalter geändert wird. Dann ist die Zuordnung Teilnehmer <=> Veranstaltung nicht mehr gegeben und entsprechend die Teilnehmerliste inkonsistent.
Nun würde ich gern das Feld "Veranstaltung" in meiner Teilnehmerliste löschen und als Lookup-Feld neu setzen (ich bin noch relativ am Anfang und das Produkt ist nicht in Betrieb, daher zum Glück ohne weiteres möglich) bzw. habe ich dies getan. Mein Problem ist jetzt, dass ich nicht weiß, wie ich den Wert des Lookupfeldes in der Teilnehmerliste programmatisch für das aktuelle Listenelement setze. Es wäre toll, wenn mir hier jemand weiterhelfen könnte!

Hier noch meine bisherige Methode zum einfügen neuer Teilnehmer:

private void AddAttendee() {
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite ElevatedSite = new SPSite(siteCol.ID))
{
using (SPWeb ElevatedWeb = ElevatedSite.OpenWeb(website.ID))
{
SPList tnList = ElevatedWeb.Lists["TeilnehmerInnen"];
SPListItemCollection listItems = tnList.Items;
SPListItem item = listItems.Add();
item["Name"] = currentUser.ID.ToString() + ";#" + currentUser.LoginName.ToString() + ";#";
item["Veranstaltung"] = currVstItem.Title;
ElevatedWeb.AllowUnsafeUpdates = true;
item.Update();
ElevatedWeb.AllowUnsafeUpdates = false;
Label1.Text = "User: " + currentUser.LoginName + " bei Veranstaltungstitel: " + currVstItem["Veranstaltungstitel"] + " angemeldet";
}
}
});
anmelden = true;
SendMail(anmelden);
}
catch (Exception ex)
{
ErrorLabel.Text = "Fehler: " + ex.Message
+ "StackTrace: " + ex.StackTrace;
anmelden = false;
}
}


Wäre super, wenn mir jemand helfen kann. Ich finde gerade leider nicht wirklich was dazu.

Vielen dank im Voraus!

edit: Das hinzufügen habe ich jetzt über
item["Veranstaltung"] = new SPFieldLookupValue(currVstItem.ID,";#"+currVstItem.Title);
lösen können. Problem besteht aber noch beim Linq-Query, da ich den Typ SPFieldLookupValue nicht mit einem String vergleichen kann.
News:
05.12.2012
pinguwien 65 1 5
1 Antwort
1
Okay, die Antwort, diesmal von mir selbst:

Man legt im PageLoad das folgene Element vom Typ SPFieldLookupValue an:
SPFieldLookupValue vstLookup = new SPFieldLookupValue(currVstItem.ID, currVstItem.Title);
wobei das currVstItem wie in der Frage beschrieben auf das aktuelle Element der Liste gecastet wird.

Der Linq-Query sieht dann folgendermaßen aus:
bool x = (from SPListItem item in tn.Items
where item["Name"].ToString() == userString
&& item["Veranstaltung"].ToString() == vstLookup.ToString()
select item).Count() > 0;

wobei das item in der anderen Liste jetzt natürlich ein LookUp-Feld ist.

Wie es in der AddAttendee-Methode gemacht wird, steht ja schon im ersten Edit.
Damit ist dann auch eine Löschweitergabe ohne weiteres möglich (wenn Event gelöscht => Lösche alle Teilnehmereinträge aus der Teilnehmerliste)
05.12.2012
pinguwien 65 1 5

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH