Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
当前位置: 主页 > Silverlight >

SilverLight中使用数据服务对数据库CRUD

时间:2010-08-14 08:43来源:未知 作者:admin 点击:

1.  建立一个数据模型

注意:模型对应的表一定要有主键,否则,建立时将不会成功。

2.建立一个数据服务

public class WebDataService1 : DataService<myDBEntities>

    {

        // 仅调用此方法一次以初始化涉及服务范围的策略。

        public static void InitializeService(IDataServiceConfiguration config)

        {

            // TODO: 设置规则以指明哪些实体集和服务操作是可见的、可更新的,等等。

            config.SetEntitySetAccessRule("*", EntitySetRights.All);

            config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

        }

        [WebGet]

        public IQueryable<tabA> getTabA(string a)

        {

            var v = CurrentDataSource.tabA.Where(p => p.a == a);

            return v;

        }

        [WebInvoke]

        public IQueryable<tabX> getTabX(string x)

        {

            var v = CurrentDataSource.tabX.Where(p => p.x == x);

            return v;

        }

 

        [QueryInterceptor("tabX")]

        public System.Linq.Expressions.Expression<Func<tabX, bool>> query_tabX()

        {

            return p => p.z != "wwxxdd"; //为真表示允许查询

        }

        [ChangeInterceptor("tabX")]

        public void change_tabX(tabX en, UpdateOperations operation)

        {

            if (operation == UpdateOperations.Add)

            {

                if (string.IsNullOrEmpty(en.y))

                {

                    //如果[y]为空的处理代码

                }

            }

            if (operation == UpdateOperations.Change)

            {

            }

            if (operation == UpdateOperations.Delete)

            {

            }

        }

}

3.设置xaml页面

<StackPanel x:Name="spTool" >

            <data:DataGrid x:Name="dg"></data:DataGrid>

            <Button x:Name="btnRetrivebyWeb" Content="WebClient方式加载数据" Width="200" />

            <Button x:Name="btnRetriveByService" Content="DataServiceContext方式加载数据" Width="200"  />

            <Button x:Name="btnCreate" Content="添加" Width="200" />

            <Button x:Name="btnUpdate" Content="修改" Width="200" />

            <Button x:Name="btnDelete" Content="删除" Width="200"  />

        </StackPanel>

4.在xaml页面对应的cs文件中添加代码

        public MainPage()

        {

            InitializeComponent();

            this.spTool.Loaded += new RoutedEventHandler(spTool_Loaded);

            this.btnRetrivebyWeb.Click += new RoutedEventHandler(btnRetrivebyWeb_Click);

            this.btnRetriveByService.Click += new RoutedEventHandler(btnRetriveByService_Click);

            this.btnCreate.Click += new RoutedEventHandler(btnCreate_Click);

            this.btnUpdate.Click += new RoutedEventHandler(btnUpdate_Click);

            this.btnDelete.Click += new RoutedEventHandler(btnDelete_Click);

        }

        #region WebClient方式加载数据

        private void btnRetrivebyWeb_Click(object sender, RoutedEventArgs e)

        {

            Uri uri = new Uri("http://localhost:8081/WebDataService1.svc/tabA");

            WebClient client = new WebClient();

            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_completed);

            client.OpenReadAsync(uri);

        }

        void client_completed(object sender, OpenReadCompletedEventArgs e)

        {

            if (e.Error == null)

            {

                XmlReader reader = XmlReader.Create(e.Result);

                XDocument ls = XDocument.Load(reader);

                XNamespace xmlns = "http://www.w3.org/2005/Atom";

                XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";

                XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";

                var list = from x in ls.Descendants(xmlns + "entry")

                           select new myService.tabA

                           {

                               a = x.Descendants(d + "a").First().Value,

                               b = x.Descendants(d + "b").First().Value,

                               c = x.Descendants(d + "c").First().Value

                           };

                dg.ItemsSource = list;

            }

        }

        #endregion

        myService.myDBEntities server;

        private void spTool_Loaded(object sender, RoutedEventArgs e)

        {

            Uri url = new Uri("http://localhost:8081/WebDataService1.svc");

            server = new myService.myDBEntities(url);

        }

        #region DataServiceContext方式加载数据

        private void btnRetriveByService_Click(object sender, RoutedEventArgs e)

        {

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(load_completed), null);

        }

        void load_completed(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj);

            this.dg.ItemsSource = tp.ToList();

        }

        #endregion

 

        void saveChanges_completed(IAsyncResult obj)

        {

            if (obj.IsCompleted)

            {

                //新增后,立即调用btnRetriveByService_Click时,会出错。

                btnRetriveByService_Click(null, new RoutedEventArgs());

            }

        }

        #region 添加数据并保存

        private void btnCreate_Click(object sender, RoutedEventArgs e)

        {

            server.AddTotabX(new myService.tabX() { x = "007", z = "sss", y = "sss" });

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

        }

        #endregion

        #region 修改数据并保存

        private void btnUpdate_Click(object sender, RoutedEventArgs e)

        {

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(begin_edit), null);

        }

        void begin_edit(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007").First();

            tp.y = "hello";

            server.UpdateObject(tp);

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

        }

        #endregion

        #region 删除数据并保存

        private void btnDelete_Click(object sender, RoutedEventArgs e)

        {

            Uri urlE = new Uri("http://localhost:8081/WebDataService1.svc/tabX");

            server.BeginExecute<myService.tabX>(urlE, new AsyncCallback(begin_del), null);

        }

        void begin_del(IAsyncResult obj)

        {

            var tp = server.EndExecute<myService.tabX>(obj).Where(p => p.x == "007").First();

            server.DeleteObject(tp);

            server.BeginSaveChanges(new AsyncCallback(saveChanges_completed), null);

        }

        #endregion

(责任编辑:admin)
Tags:Silverlight
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价