silverlight + wcf(json格式) + sqlserver存储过程分页

silverlight并没有提供现成的分页控件,百度了一圈,也没有发现aspx中好用的类似AspNetPager成熟控件,网上现有的一些分页代码,很多也是基于1.0版本的,silverlight2.0的并不多,自个儿琢磨了一下,发现自己弄一个也并非难事,思路和主要代码分享如下:

1.通用的“海量”数据分页存储过程
在做aspx开发时我已经用存储过程分页多年,这个东东是通用的(不管前端用什么语言来做),而且性能也不错,所以这里就直接套过来用了,百度一下"分页存储过程"会有N多版本,这里也给出我自己写的一个版本(仅适用于sqlserver 2005及以上版本)

ContractedBlock.gifExpandedBlockStart.gif分页存储过程
-- =============================================
--
 Author:        <杨俊明-菩提树下的杨过>
--
 Create date: <2006-11-05>
--
 Description:    <高效分页存储过程,仅适用于Sql2005>
--
 Notes:        <排序字段强烈建议建索引>
--
 =============================================
CREATE Procedure [dbo].[up_Page2005] 
 
@TableName varchar(500),        --表名
 @Fields nvarchar(MAX= '*',    --字段名(全部字段为*)
 @OrderField nvarchar(MAX),        --排序字段(必须!支持多字段)
 @sqlWhere nvarchar(MAX= Null,--条件语句(不用加where)
 @pageSize int,                    --每页多少条记录
 @pageIndex int = 1 ,            --指定当前为第几页
 @TotalPage int output            --返回总页数 
as
begin

    
Begin Tran --开始事务

    
Declare @sql nvarchar(MAX);
    
Declare @totalRecord int;    

    
--计算总记录数
         
    
if (@SqlWhere='' or @sqlWhere=NULL)
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName
    
else
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere

    

    
EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数        
    
    
--计算总页数
    select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)

    
if (@SqlWhere='' or @sqlWhere=NULL)
        
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as RowId,' + @Fields + ' from ' + @TableName + ' with (nolock)' 
    
else
        
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as RowId,' + @Fields + ' from ' + @TableName + ' with (nolock) where ' + @SqlWhere    
        
    
    
--处理页数超出范围情况
    if @PageIndex<=0 
        
Set @pageIndex = 1
    
    
if @pageIndex>@TotalPage
        
Set @pageIndex = @TotalPage

     
--处理开始点和结束点
    Declare @StartRecord int
    
Declare @EndRecord int
    
    
set @StartRecord = (@pageIndex-1)*@PageSize + 1
    
set @EndRecord = @StartRecord + @pageSize - 1

    
--继续合成sql语句
    set @Sql = @Sql + ') as ' + @TableName + ' where RowId between ' + Convert(varchar(50),@StartRecord+ ' and ' +  Convert(varchar(50),@EndRecord)
    
print @sql ;
    
Exec(@Sql)
    
---------------------------------------------------
    If @@Error <> 0
      
Begin
        
RollBack Tran
        
Return -1
      
End
    
Else
      
Begin
        
Commit Tran
        
Return @totalRecord ---返回记录总数
      End
end

  

ContractedBlock.gifExpandedBlockStart.gifCode
-- =============================================
--
 Author:        <杨俊明-菩提树下的杨过>
--
 Create date: <2006-11-05>
--
 Description:    <高效分页存储过程,仅返回总页数和总记录数,仅适用于Sql2005>
--
 Notes:        <排序字段强烈建议建索引>
--
 =============================================
CREATE Procedure [dbo].[up_Page2005_Statistic] 
 
@TableName varchar(500),        --表名
 @Fields nvarchar(MAX= '*',    --字段名(全部字段为*)
 @OrderField nvarchar(MAX),        --排序字段(必须!支持多字段)
 @sqlWhere nvarchar(MAX= Null,--条件语句(不用加where)
 @pageSize int,                    --每页多少条记录
 @pageIndex int = 1 ,            --指定当前为第几页
 @TotalPage int output            --返回总页数 
as
begin   

    
Declare @sql nvarchar(MAX);
    
Declare @totalRecord int;    

    
--计算总记录数         
    if (@SqlWhere='' or @sqlWhere=NULL)
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName
    
else
        
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere    

    
EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数        
    
    
--计算总页数
    select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize)   
    

    
print 'TotalRecord=' + Convert(nvarchar(50),@totalRecord);
    
print 'TotalPage=' + Convert(nvarchar(50),@totalPage);

    
Return @totalRecord ---返回记录总数
end

 

注:第二个是直接在第一个基础上简化得来的,仅返回总页数和总记录数;方便某些不需要返回实体数据,仅需要知道总页数和总记录数的特殊情况调用

2.利用wcf直接或间接调用存储过程,返回json数据

wcf能返回json数据已经不是什么新鲜事儿了,这里就不多说了,贴出主要代码(直接拿我以前封装好的工具库中的一个方法示例一下,大家知道意思就可以了) 

ContractedBlock.gifExpandedBlockStart.gifCode
/// <summary>
        
/// 调用分页存储过程,返回Json数据
        
/// </summary>
        
/// <param name="pTable"></param>
        
/// <param name="pWhere"></param>
        
/// <param name="pFields"></param>
        
/// <param name="pOrder"></param>
        
/// <param name="pPageSize"></param>
        
/// <param name="pPageIndex"></param>
        
/// <param name="pTotalPage"></param>
        
/// <param name="pTotalRecord"></param>
        
/// <returns></returns>
        [WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, UriTemplate = "SelectPageData?pTable={pTable}&pWhere={pWhere}&pFields={pFields}&pOrder={pOrder}&pPageSize={pPageSize}&pPageIndex={pPageIndex}&pTotalPage={pTotalPage}&pTotalRecord={pTotalRecord}")]
        [OperationContract]
        
public Stream SelectPageData(string pTable, string pWhere, string pFields, string pOrder, int pPageSize,int pPageIndex,int pTotalPage,int pTotalRecord)
        {            
            
return GetStream(GetJsonData(Database.GetDataTableForPage(pTable,pFields,pOrder,pWhere,pPageSize,pPageIndex,pTotalPage,pTotalRecord)));
        }


        
/// <summary>
        
/// 调用分页存储过程,返回总页数和总记录数
        
/// </summary>
        
/// <param name="pTable"></param>
        
/// <param name="pWhere"></param>
        
/// <param name="pFields"></param>
        
/// <param name="pOrder"></param>
        
/// <param name="pPageSize"></param>
        
/// <param name="pPageIndex"></param>
        
/// <param name="pTotalPage"></param>
        
/// <param name="pTotalRecord"></param>
        
/// <returns></returns>
        [WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, UriTemplate = "SelectPageDataStatistic?pTable={pTable}&pWhere={pWhere}&pFields={pFields}&pOrder={pOrder}&pPageSize={pPageSize}&pPageIndex={pPageIndex}&pTotalPage={pTotalPage}&pTotalRecord={pTotalRecord}")]
        [OperationContract]
        
public Stream SelectPageDataStatistic(string pTable, string pWhere, string pFields, string pOrder, int pPageSize, int pPageIndex, int pTotalPage, int pTotalRecord)
        {
           Database.GetTotalPageAndTotalRecordForPage(pTable, pFields, pOrder, pWhere, pPageSize, pPageIndex, 
out pTotalPage,out pTotalRecord);
           
string _Result = "{'TotalPage':'" + pTotalPage.ToString() + "','RecordCount':'" + pTotalRecord + "'}";
           
return GetStream(_Result);
        }

 其中有二个方法GetStream和GetJsonData,主要用于将字符串转换为流,以及将格式化Json字符串 

ContractedBlock.gifExpandedBlockStart.gifCode
private Stream GetStream(string str)
        {
            MemoryStream ms 
= new MemoryStream();
            StreamWriter sw 
= new StreamWriter(ms);
            sw.AutoFlush 
= true;
            sw.Write(str);
            ms.Position 
= 0;
            WebOperationContext.Current.OutgoingResponse.ContentType 
= "text/plain";
            
return ms;
        }


        
public static string GetJsonData(DataTable dt)
        {
            
string _Result = Utils.CreateJsonParameters(dt);//CreateJsonParameters是我工具库里的一个方法,用于将DataTable转化为json字符串

            
if (_Result.IsNullStr())
            {
                _Result 
= "[{}]";
            }
            
else
            {
                
if (_Result.StartsWith("{ \"Head\":["))
                {
                    _Result 
= _Result.Replace("{ \"Head\":[""[");
                }

                
if (_Result.EndsWith("]}")) 
                {
                    _Result 
= _Result.Trim("}");
                }
            }           
            
return _Result;
        }

 

3.前面二步弄完了,基本上就可以动手写silverlight代码了

xaml前端文件:

ContractedBlock.gifExpandedBlockStart.gifCode
<UserControl
   
    
xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
    xmlns:data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
    x:Class
="WcfTest.DataGrid"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" 
    
>
   

    
<Grid x:Name="LayoutRoot" Background="White" ShowGridLines="False">
        
<Grid.RowDefinitions>
            
<RowDefinition>                
            
</RowDefinition>
            
<RowDefinition Height="25">
            
</RowDefinition>
        
</Grid.RowDefinitions>
        
<Grid.ColumnDefinitions>
            
<ColumnDefinition>
                
            
</ColumnDefinition>
            
<ColumnDefinition>

            
</ColumnDefinition>
        
</Grid.ColumnDefinitions>
        
        
<data:DataGrid x:Name="dg" AutoGenerateColumns="False" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2">
            
<data:DataGrid.Columns>
                
<data:DataGridTextColumn Header="F_ID"
                Binding
="{Binding F_ID}" />
                
<data:DataGridTextColumn Header="F_ClassName" 
                Binding
="{Binding F_ClassName}" />
                
<data:DataGridTextColumn Header="F_RootId" 
                Binding
="{Binding F_RootId}" />
                
<data:DataGridTextColumn Header="F_Depth" 
                Binding
="{Binding F_Depth}" />
                
<data:DataGridTextColumn Header="F_Type" 
                Binding
="{Binding F_Type}" />

                
            
</data:DataGrid.Columns>
        
</data:DataGrid>
        
        
<TextBlock x:Name="txtStat" Text="共有X条记录,第X页/共X页,X/每页" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" Margin="5,0,0,0" ></TextBlock>
        
<StackPanel Grid.Column="1" Grid.Row="1" HorizontalAlignment="Right" Orientation="Horizontal" VerticalAlignment="Center" Height="22">
            
<Button x:Name="btnFirst" Content="首页" Click="btnFirst_Click" ></Button>
            
<Button x:Name="btnPrev" Content="上页" Margin="5,0,0,0" Click="btnPrev_Click"></Button>
            
<Button x:Name="btnNext" Content="下页" Margin="5,0,0,0" Click="btnNext_Click"></Button>
            
<Button x:Name="btnLast" Content="末页" Margin="5,0,0,0" Click="btnLast_Click" ></Button>
            
<TextBox x:Name="txtPageIndex" Text="1" Margin="5,0,0,0" Width="30" KeyUp="txtPageIndex_KeyUp"></TextBox>
            
<Button x:Name="btnPageGo" Content="Go" Margin="5,0,5,0" Click="btnPageGo_Click"></Button>
        
</StackPanel>
    
</Grid>
</UserControl>

 

讲解一下:用Grid布局,先分上下二行,第一行放一个DataGrid控件(silverlight2新增的控件!),第二行分二列,左列显示统计信息,右列显示翻页按钮 

后端cs代码: 

ContractedBlock.gifExpandedBlockStart.gifCode
using System;
using System.Collections.Generic;
using System.Json;
using System.Net;
using System.Windows.Controls;
using System.Windows.Media;
using JIMMY.TOOLS.Silverlight;

namespace WcfTest
{
    
public partial class DataGrid : UserControl
    {

        
protected string pTable = "", pWhere = "", pFields = "", pOrderField = "", pBaseUri = "http://localhost:7055/Demo.svc/";
        
protected int pPageSize = 10, pPageIndex = 1, pTotalPage = 0, pTotalRecord = 0;

        
public DataGrid()
        {
            InitializeComponent();

            
#region 初始化查询参数
            pTable 
= "T_Class";
            
//pWhere = "F_Type='place' And F_Depth=0";
            pWhere = "";
            pFields 
= "F_ID,F_ClassName,F_Depth,F_RootId,F_Type";
            pOrderField 
= "F_RootId";            
            
#endregion 

            
//开始查询
            LoadData();
            LoadDataStatistic();

        }


        
/// <summary>
        
/// 加载分页数据
        
/// </summary>
        void LoadData()
        {
           

            Uri serviceUri 
= new Uri(pBaseUri + "SelectPageData?pTable=" + pTable.UrlEncode() + "&pWhere=" + pWhere.UrlEncode() + "&pFields=" + pFields.UrlEncode() + "&pOrder=" + pOrderField.UrlEncode() + "&pPageSize=" + pPageSize.ToString().UrlEncode() + "&pPageIndex=" + pPageIndex.ToString().UrlEncode() + "&pTotalPage=" + pTotalPage.ToString().UrlEncode() + "&pTotalRecord=" + pTotalRecord.ToString().UrlEncode());
            WebClient downloader 
= new WebClient();
            downloader.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(LoadDataCompleted);
            downloader.OpenReadAsync(serviceUri);

            txtStat.Text 
= "数据加载中dot.gif";
            txtStat.Foreground 
= new SolidColorBrush(Color.FromArgb(25525500));
        }

        
/// <summary>
        
/// 加载分页数据的回调函数
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void LoadDataCompleted(object sender, OpenReadCompletedEventArgs e)
        {

            
if (e.Error == null)
            {
                
try
                {
                    JsonArray _Arr 
= (JsonArray)JsonArray.Load(e.Result);

                    List
<Data> _List = new List<Data>();
                    
for (int i = 0; i < _Arr.Count; i++)
                    {

                        _List.Add(
new Data() { F_ClassName = _Arr[i]["F_ClassName"], F_Depth = int.Parse(_Arr[i]["F_Depth"]), F_ID = new Guid(_Arr[i]["F_ID"]), F_RootId = int.Parse(_Arr[i]["F_RootId"]), F_Type = _Arr[i]["F_Type"] });
                    }

                    dg.ItemsSource 
= _List;



                }
                
catch (Exception ex)
                {


                }

            }
            
else
            {

            }
        }


        
/// <summary>
        
/// 加载数据的总页数/总记录条数
        
/// </summary>
        void LoadDataStatistic()
        {

            Uri serviceUri 
= new Uri(pBaseUri + "SelectPageDataStatistic?pTable=" + pTable.UrlEncode() + "&pWhere=" + pWhere.UrlEncode() + "&pFields=" + pFields.UrlEncode() + "&pOrder=" + pOrderField.UrlEncode() + "&pPageSize=" + pPageSize.ToString().UrlEncode() + "&pPageIndex=" + pPageIndex.ToString().UrlEncode() + "&pTotalPage=" + pTotalPage.ToString().UrlEncode() + "&pTotalRecord=" + pTotalRecord.ToString().UrlEncode());
            WebClient downloader 
= new WebClient();
            downloader.OpenReadCompleted 
+= new OpenReadCompletedEventHandler(LoadDataStatisticCompleted);
            downloader.OpenReadAsync(serviceUri);

        }


        
/// <summary>
        
/// 加载数据的总页数/总记录条数--回调函数
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        void LoadDataStatisticCompleted(object sender, OpenReadCompletedEventArgs e)
        {

            
if (e.Error == null)
            {
                
try
                {
                    JsonValue _json 
= JsonObject.Load(e.Result);                  

                    pTotalPage 
= int.Parse(_json["TotalPage"]);
                    pTotalRecord 
= int.Parse(_json["RecordCount"]);


                    txtStat.Text 
= "共有" + pTotalRecord + "条记录,第" + pPageIndex.ToString() + "页/共" + pTotalPage + "页," + pPageSize.ToString() + "/每页";
                    txtPageIndex.Text 
= pPageIndex.ToString();
                    txtStat.Foreground 
= new SolidColorBrush(Color.FromArgb(255000));

                }
                
catch (Exception ex)
                {


                }

            }
            
else
            {

            }
        }

        
/// <summary>
        
/// 上页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnPrev_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            pPageIndex 
= pPageIndex <= 1 ? 1 : pPageIndex - 1;
            LoadData();
            LoadDataStatistic();
        }

        
/// <summary>
        
/// 下页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnNext_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            pPageIndex 
= pPageIndex >= pTotalPage ? pTotalPage : pPageIndex + 1;
            LoadData();
            LoadDataStatistic();
        }

        
/// <summary>
        
/// 首页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnFirst_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            pPageIndex 
= 1;
            LoadData();
            LoadDataStatistic();
        }

        
/// <summary>
        
/// 末页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnLast_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            pPageIndex 
= pTotalPage;
            LoadData();
            LoadDataStatistic();
        }

        
/// <summary>
        
/// 跳转到指定页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnPageGo_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            LoadPageIndexData();
        }

        
private void LoadPageIndexData() 
        {
            
int _currentPageIndex = 1;
            
if (!int.TryParse(txtPageIndex.Text, out _currentPageIndex))
            {
                txtPageIndex.Text 
= _currentPageIndex.ToString();
            }

            
if (_currentPageIndex >= pTotalPage)
            {
                _currentPageIndex 
= pTotalPage;
                txtPageIndex.Text 
= _currentPageIndex.ToString();
            }

            
if (_currentPageIndex <= 1)
            {
                _currentPageIndex 
= 1;
                txtPageIndex.Text 
= _currentPageIndex.ToString();
            }

            pPageIndex 
= _currentPageIndex;
            LoadData();
            LoadDataStatistic();
        }

        
/// <summary>
        
/// 输入页数回车后,查询指定页数据
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void txtPageIndex_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
        {
            
if (e.Key == System.Windows.Input.Key.Enter) 
            {
                LoadPageIndexData();
            }
        }

    }

    
/// <summary>
    
/// 返回数据的类
    
/// </summary>
    public class Data
    {
        
public Guid F_ID { getset; }
        
public string F_ClassName { getset; }
        
public int F_RootId { getset; }
        
public int F_Depth { getset; }
        
public string F_Type { getset; }
    }  

   
}

 

主要思路:
定义一组变量变于保存查询参数(包括当前第几页,每页多少条记录之类),然后利用WebClient访问wcf,将json数据download回来,成功后解析为json对象,再转化为强类型的List<Data>,最后绑定完事

运行效果图:

2009030216490245.jpg

转载于:https://www.cnblogs.com/yjmyzz/archive/2009/03/02/1401622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是指利用计算机和现代,现代计算机一般指什么计算机?

现代计算机一般指通用数字电子计算机&#xff0c;它是当今世界电子计算机行业中的主流&#xff0c;其内部处理的是一种称为符号信号或数字信号的电信号&#xff1b;它的主要特点是“离散”&#xff0c;在相邻的两个符号之间不可能有第三种符号存在。电子计算机分为模拟式电子计…

【转】VS中常用图标提示含义

转自&#xff1a;https://www.cnblogs.com/zhjason/articles/14044190.html 有增删 “类视图”和“对象浏览器”图标 “类视图”和“对象浏览器”显示表示代码实体的图标&#xff0c;如命名空间、类、函数和变量 。 下表展示和描述了图标。 图标描述图标描述图标描述图标描述…

二层和三层转发

二层转发的机制是什么?学习线程和报文转发线程。二层只跟MAC地址有关 与IP无关 所以在二层做IP&#xff0d;MAC绑定是无效的。 三层以太网交换机的转发机制主要分为两个部分&#xff1a; 二层转发和三层交换。      先讲二层转发流程。      1、 MAC地址介绍   MA…

【转】胶片曝光时的排版!!!!!!!

这个本来没啥 不是什么算法 绝技。 都不值得一提。 其实这个是医学影像胶片曝光时排版的一个逻辑。 dicom标准第三部分 主要是讲IOD定义 在第166页有这样的描述&#xff1a; 表C.13.5-1图象盒象素描述组件 属性名称 标记       说明 图象位置 (2020,0010)  …

计算机课数学,这4个专业,对数学要求很高,数学不好的慎选!

建筑学专业这个专业就是典型数学课程比较多的专业&#xff0c;如果数学成绩不好&#xff0c;真心建议千万不要选择这个专业&#xff0c;因为学习的课程与大多与数学有关&#xff0c;而且难度较大。像代数&#xff0c;微积分&#xff0c;线性规划&#xff0c;统计学等课程都是在…

架构师之路(5)---IoC框架

1 IoC理论的背景 我们都知道在面向对象的应用中&#xff0c;软件系统都是由N个对象组成的&#xff0c;它们通过彼此的合作&#xff0c;最终实现业务逻辑。 图1&#xff1a;耦合在一起的对象 如果我们打开机械式手表的后盖&#xff0c;就会看到与上面类似的情形&#xff0c;各…

【转】数据库软考笔记(一)第一章 计算机硬件基础知识笔记总结

转自&#xff1a;https://blog.csdn.net/qq_36411874/article/details/115057569 目录 运算器&#xff1a;ALU、AC、DR、PSW 控制器&#xff1a;IR、PC、AR、ID 寄存器组&#xff08;了解即可&#xff09; 存储器 存储器与总线&#xff08;了解&#xff0c;考分类&#xf…

【转】DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像

转自&#xff1a;https://www.cnblogs.com/mfrbuaa/p/4004114.html 有修订 背景介绍&#xff1a; 近期项目需求&#xff0c;需要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发。在C语言下&#xff0c;我使用的是应用最广泛的DCMTK开源库&#xff0c;在本专栏的起初阶段…

xfire客户端对返回list很挑剔,所以需要使用泛型。

casldap异常分析 | xfirewebservice(服务器配置篇) 2008-12-31xfirewebservice(客户端调用篇) 服务接口&#xff0c;就是用来调用的&#xff0c;所以客户端显得尤为重要&#xff0c;xfire客户端对返回list很挑剔&#xff0c;所以需要使用泛型。 如何建立webservice client 步骤…

在虚拟机上运行vxWorks

Vxworks是一个嵌入式系统&#xff0c;主要运行在arm、ppc、mips等嵌入式处理器上&#xff0c;它同样可以运行在X86处理器上。风河公司开发的tornado开发环境就 包括了pentium版本&#xff0c;并且发布了相应的bsp。因此我们可在vmware虚拟机上运行vxworks&#xff0c;利用虚拟机…

使用SDL打造游戏世界之入门篇 - 7

打开和显示图片在这个例子里我们将学习如何使用SDL程序中打开和显示图片。示例程序将绘制一个漂亮的背景&#xff0c;上面显示一个正方形图案&#xff0c;并可以使用键盘的方向键移动它。如果比较熟悉“推箱子”这个游戏&#xff0c;可以看出这个程序实际就是推箱子游戏的基础。…

【转】GPS从入门到放弃(一) --- GPS基础原理

转自&#xff1a;https://blog.csdn.net/tyst08/article/details/100529424 GPS从入门到放弃&#xff08;一&#xff09; — GPS基础原理 GPS&#xff0c;全称Global Positioning System&#xff0c;已经广泛应用于我们的日常生活中了&#xff0c;现在的智能手机 里都会自带G…

【转】10个推荐的 PACS/DICOM Server开源项目

10个推荐的 PACS/DICOM Server开源项目 转自&#xff1a;https://zhuanlan.zhihu.com/p/65437040 soolaugust 喜欢我的分享可以关注公众号&#xff1a;雨夜随笔 35 人赞同了该文章 本文仅授权给公众号&#xff1a;雨夜随笔&#xff0c; 欢迎关注 本文翻译自&#xff1a;To…

字节序、位序

字节序 字节序&#xff0c;又称端序、尾序&#xff0c;英文单词为Endian&#xff0c;该单词来源于于乔纳森斯威夫特的小说《格列佛游记》&#xff0c;小说中的小人国因为吃鸡蛋的问题而内战&#xff0c;战争开始是由于以下的原因&#xff1a;我们大家都认为&#xff0c;吃鸡蛋前…

怎么抓取屏幕截图计算机考试时间,定时抓屏快照(电脑截屏工具)V4.8 最新版

定时抓屏快照(电脑截屏工具)是一款非常实用的电脑屏幕定时抓拍软件。想定时截取电脑屏幕&#xff1f;定时抓屏快照(电脑截屏工具)轻松帮助用户。马上要放假了&#xff0c;家长一定很担心小孩最新的上网情况&#xff0c;看是在电脑上玩什么&#xff0c;用户通过该软件可以及时了…

【转】matlab函数编译成dll供Cpp调用的方法

转自&#xff1a;https://www.cnblogs.com/vincenzo/archive/2009/09/09/1563467.html 以前做过matlab7与c的混合编程&#xff1a;将m函数编译成dll给C调用&#xff0c;从而加快开发的进度。但是今天在matlab2008b下面又做了一遍&#xff0c;发现matlab又改了很多东西&#xf…

可以测试流放之路伤害的软件,测试平台及细节一览 - 《流放之路》国服硬件需求测试:低配也能续写ARPG传奇 - 超能网...

测试平台、场景说明测试平台测试平台配置主要分为两套&#xff0c;第一套配置为Skylake平台基础搭建的ASUS MAXIMUS VIIIGEN(Z170)主板&#xff0c;处理器为Intel Core i7-6700K&#xff0c;内存是G.Skill Ripjaws V 4GB DDR43200x2组成的双通道&#xff1b;第二套配置为Kaveri…

关于增强(五)-Class Enhancement

Class/Interface增强允许增加&#xff0c; 对已有的方法增加可选参数 添加方法&#xff0c;事件&#xff0c;事件处理 参考接口 对存在的方法添加出口&#xff0c;其中包括方法开始前的出口&#xff08;Pre-Exit&#xff09;&#xff0c;方法结束快结束的出口(Post-Exit)&#…

【转】彻底理解cookie,session,token

转自&#xff1a;https://zhuanlan.zhihu.com/p/63061864 彻底理解cookie&#xff0c;session&#xff0c;token 发展史 1、很久很久以前&#xff0c;Web 基本上就是文档的浏览而已&#xff0c; 既然是浏览&#xff0c;作为服务器&#xff0c; 不需要记录谁在某一段时间里都浏…

【转】c#数字图像处理(一)Bitmap类、 Bitmapdata类和 Graphics类

转自&#xff1a;https://www.cnblogs.com/dearzhoubi/p/8553763.html Bitmap类、 Bitmapdata类和 Graphics类是C#图像处理中最重要的3个类,如果要用C# 进行图像处理,就一定要掌握它们。 1.1 Bitmap类 Bitmap对象封装了GDI中的一个位图,此位图由图形图像及其属性的像素数据组成…