Silverlight 4.0 在silverlight数据表单中添加新项目和编辑项目未正确更新SharePoint列表
我正在尝试制作一个简单的Silverlight应用程序,它将托管在SharePoint网站上。 我正在从列表“testlist”中读取信息,并尝试使用dataform控件编辑、添加和删除列表中的数据。我可以很好地删除。当我尝试添加时,它会添加一个新条目,其中包含以前查看的项目的数据,我无法编辑当前项目。这是我的密码:Silverlight 4.0 在silverlight数据表单中添加新项目和编辑项目未正确更新SharePoint列表,silverlight-4.0,sharepoint-2010,dataform,Silverlight 4.0,Sharepoint 2010,Dataform,我正在尝试制作一个简单的Silverlight应用程序,它将托管在SharePoint网站上。 我正在从列表“testlist”中读取信息,并尝试使用dataform控件编辑、添加和删除列表中的数据。我可以很好地删除。当我尝试添加时,它会添加一个新条目,其中包含以前查看的项目的数据,我无法编辑当前项目。这是我的密码: namespace SP2010 { public partial class MainPage : UserControl { ClientContext context
namespace SP2010
{
public partial class MainPage : UserControl
{
ClientContext context;
List customerList;
ListItemCollection allCustomers;
public MainPage()
{
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
InitializeComponent();
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = this;
context = new ClientContext(ApplicationContext.Current.Url);
customerList = context.Web.Lists.GetByTitle("testlist");
context.Load(customerList);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml =@"<View><Query></Query><RowLimit>1000</RowLimit></View>";
allCustomers = customerList.GetItems(camlQuery);
context.Load(allCustomers);
context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), new ClientRequestFailedEventHandler(OnRequestFailed));
}
private void OnRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args)
{
Dispatcher.BeginInvoke(DisplayListData);
}
private void OnRequestFailed(Object sender, ClientRequestFailedEventArgs args)
{
MessageBox.Show(args.ErrorDetails + " " + args.Message);
}
public ObservableCollection<SPCustomers> Printers
{
get
{
if (printers == null)
{
printers = new ObservableCollection<SPCustomers>();
foreach (ListItem item in allCustomers)
{
printers.Add(new SPCustomers
{
IPAddress = item["Title"].ToString(),
Make = item["make"].ToString(),
Model = item["model"].ToString(),
xCord = item["x"].ToString(),
yCord = item["y"].ToString(),
id = Convert.ToInt32(item["ID"].ToString())
});
}
}
return (printers);
}
}
private ObservableCollection<SPCustomers> printers;
private void DisplayListData()
{
dataForm1.DataContext = Printers;
}
private void dataForm1_EditEnded(object sender, DataFormEditEndedEventArgs e)
{
if (e.EditAction == DataFormEditAction.Commit)
{
if (dataForm1.IsItemChanged)
{
customerList = context.Web.Lists.GetByTitle("testlist");
SPCustomers printer = dataForm1.CurrentItem as SPCustomers;
ListItem items = customerList.GetItemById(printer.id);
items["Title"] = printer.IPAddress;
items["make"] = printer.Make;
items["model"] = printer.Model;
items["x"] = printer.xCord;
items["y"] = printer.yCord;
items.Update();
context.ExecuteQueryAsync(OnRequestSucceeded, OnRequestFailed);
}
}
}
private void dataForm1_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
{
customerList = context.Web.Lists.GetByTitle("testlist");
SPCustomers printe = dataForm1.CurrentItem as SPCustomers;
ListItemCreationInformation itemcreationinfo = new ListItemCreationInformation();
ListItem items = customerList.AddItem(itemcreationinfo);
items["Title"] = printe.IPAddress;
items["make"] = printe.Make;
items["model"] = printe.Model;
items["x"] = printe.xCord;
items["y"] = printe.yCord;
items.Update();
context.ExecuteQueryAsync(OnRequestSucceeded, OnRequestFailed);
}
private void dataForm1_DeletingItem(object sender, System.ComponentModel.CancelEventArgs e)
{
SPCustomers printer = dataForm1.CurrentItem as SPCustomers;
ListItem oListItem = customerList.GetItemById(printer.id);
oListItem.DeleteObject();
context.ExecuteQueryAsync(OnRequestSucceeded, OnRequestFailed);
}
}
}
名称空间SP2010
{
公共部分类主页面:UserControl
{
客户语境;
列出客户名单;
ListItemCollection所有客户;
公共主页()
{
this.Loaded+=新的RoutedEventHandler(主页面_-Loaded);
初始化组件();
}
已加载无效主页(对象发送器、路由目标)
{
this.DataContext=this;
context=newclientcontext(ApplicationContext.Current.Url);
customerList=context.Web.Lists.GetByTitle(“testlist”);
加载(customerList);
CamlQuery CamlQuery=新的CamlQuery();
camlQuery.ViewXml=@“1000”;
allCustomers=customerList.GetItems(camlQuery);
加载(所有客户);
ExecuteQueryAsync(新ClientRequestSucceedEventHandler(OnRequestSucceed),新ClientRequestFailedEventHandler(OnRequestFailed));
}
private void onRequestSuccessed(对象发件人、ClientRequestSucceedeDevenTargets参数)
{
Dispatcher.BeginInvoke(DisplayListData);
}
private void OnRequestFailed(对象发送方、ClientRequestFailedEventArgs参数)
{
MessageBox.Show(args.ErrorDetails+“”+args.Message);
}
公共可观察收集打印机
{
收到
{
如果(打印机==null)
{
打印机=新的ObservableCollection();
foreach(所有客户中的列表项)
{
打印机。添加(新客户)
{
IPAddress=item[“Title”]。ToString(),
Make=项目[“Make”]。ToString(),
模型=项[“模型”]。ToString(),
xCord=item[“x”].ToString(),
yCord=项目[“y”]。ToString(),
id=Convert.ToInt32(项[“id”].ToString())
});
}
}
退货(打印机);
}
}
私人可观察收集打印机;
私有void DisplayListData()
{
dataForm1.DataContext=打印机;
}
私有void dataForm1_EditEnded(对象发送方,DataFormEditEndedEventArgs e)
{
if(e.EditAction==DataFormEditAction.Commit)
{
如果(dataForm1.IsItemChanged)
{
customerList=context.Web.Lists.GetByTitle(“testlist”);
SPCustomers printer=dataForm1.CurrentItem作为SPCustomers;
ListItems=customerList.GetItemById(printer.id);
items[“Title”]=printer.IPAddress;
项目[“make”]=打印机。make;
项目[“模型”]=打印机.模型;
项目[“x”]=printer.xCord;
项目[“y”]=printer.yCord;
items.Update();
ExecuteQueryAsync(OnRequestSuccessed,OnRequestFailed);
}
}
}
private void dataForm1_AddingNewItem(对象发送方,DataFormAddingNewItemEventArgs e)
{
customerList=context.Web.Lists.GetByTitle(“testlist”);
SPCustomers printe=dataForm1.CurrentItem作为SPCustomers;
ListItemCreationInformation itemcreationinfo=新建ListItemCreationInformation();
ListItems=customerList.AddItem(itemcreationinfo);
项目[“标题”]=printe.IPAddress;
项目[“制作”]=打印制作;
项目[“模型”]=打印模型;
项目[“x”]=printe.xCord;
项目[“y”]=printe.yCord;
items.Update();
ExecuteQueryAsync(OnRequestSuccessed,OnRequestFailed);
}
私有void dataForm1_DeletingItem(对象发送方,System.ComponentModel.CancelEventArgs e)
{
SPCustomers printer=dataForm1.CurrentItem作为SPCustomers;
ListItem oListItem=customerList.GetItemById(printer.id);
DeleteObject();
ExecuteQueryAsync(OnRequestSuccessed,OnRequestFailed);
}
}
}
和我的数据表:
<df:DataForm ItemsSource="{Binding}" Height="276" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataForm1" VerticalAlignment="Top" Width="376" EditEnded="dataForm1_EditEnded" AddingNewItem="dataForm1_AddingNewItem" DeletingItem="dataForm1_DeletingItem" CommandButtonsVisibility="All" />
谢谢你的帮助
更新:更改为此将在大约7小时内回答,当它让我没关系,我找到了它。我更改了我的editended为此,并完全删除了addingNewitem方法。现在我只需要隐藏ID字段,它就会工作得很好
private void dataForm1_EditEnded(object sender, DataFormEditEndedEventArgs e)
{
if (e.EditAction == DataFormEditAction.Commit)
{
customerList = context.Web.Lists.GetByTitle("testlist");
SPCustomers printer = dataForm1.CurrentItem as SPCustomers;
ListItem items;
if (printer.id != 0)
{
items = customerList.GetItemById(printer.id);
}
else
{
ListItemCreationInformation itemcreationinfo = new ListItemCreationInformation();
items = customerList.AddItem(itemcreationinfo);
}
items["Title"] = printer.IPAddress;
items["make"] = printer.Make;
items["model"] = printer.Model;
items["x"] = printer.xCord;
items["y"] = printer.yCord;
items.Update();
context.ExecuteQueryAsync(OnRequestSucceeded, OnRequestFailed);
}
}
我现在明白了为什么它会添加一个带有之前项目信息的项目。当我按下add(添加)按钮时,会调用该事件,以获取当前选定的信息。通过删除
if(dataForm1.IsItemChanged){
我使编辑功能开始工作。