silverlight+ria service

5 replies [最后一篇]
wjx8408
wjx8408 的头像
User offline. Last seen 16 周 6 天 ago. Offline
Joined: 04/04/2010

silverlight3客户端已通过ria service 从数据库读到数据并在datagrid控件上显示出来了,现在的需求是从控件中提取几个字段的数据,该如何做呢?请高人指点!!!

admin
admin 的头像
User offline. Last seen 14 小时 33 分钟 ago. Offline
Joined: 09/13/2009
re:wjx

方法有很多,常用的有两种,一个是显示的控件中只绑定指定字段。第二种是使用linq 去select一个新的数据结构。如:
publish class dataSkin
{
publish string id{get;set;}
publish int age{get;set;}
}
以上是一个数据结构:
下边是假定的从你的数据库提取指定字段:
var dts= from dt in datasource.datatable selelct new dataSkin()
{
id=dt.id,
age=dt.age
};
以上即完成过一个新的数据集。



https://mcp.microsoft.com/authenticate/validatemcp.aspx
Transcript ID (868224)
Access Code (jacle169)

wjx8408
wjx8408 的头像
User offline. Last seen 16 周 6 天 ago. Offline
Joined: 04/04/2010
ria service

非常感谢admin的回答,谢谢。我是一个silverlight初学者,很多问题还不是很了解。我的底层数据库是:一个数据表和一个视图,视图中是实时数据中的最新一条数据,表和视图包括ch0,ch1,......,ch52字段,其中ch2和ch3是gps的经纬度数据,现在所有的数据都能在silverlight前端的datagrid控件中显示出来,我的目的就是把实时传到前端的gps数据提出来,调用地图api函数mappoint()把gps数据显示在电子地图中。我的代码如下,但怎么也显示不出来,不知是什么原因,希望得到您的帮助,方便的话留下联系方式便于交流!
public partial class MainPage : UserControl
{

DispatcherTimer timer = new DispatcherTimer();

public MainPage()
{
InitializeComponent();

btn_jk.Click += new RoutedEventHandler(btn_jk_Click);
btn_yj.Click += new RoutedEventHandler(btn_yj_Click);
btn_qc.Click += new RoutedEventHandler(btn_qc_Click);
btn_tz.Click += new RoutedEventHandler(btn_tz_Click);

}

void btn_tz_Click(object sender, RoutedEventArgs e)
{
timer.Stop();
}

void btn_qc_Click(object sender, RoutedEventArgs e)
{
GraphicsLayer graphicsLayer = jlmap.Layers["TruckMonitorLayer"] as GraphicsLayer;
graphicsLayer.Graphics.Clear();
}

void btn_yj_Click(object sender, RoutedEventArgs e)
{

throw new NotImplementedException();
}

void btn_jk_Click(object sender, RoutedEventArgs e)
{
timer.Interval = new TimeSpan(0, 0, 5);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}

void timer_Tick(object sender, EventArgs e)
{
SL3TruckMonitorDomainContext ctx = new SL3TruckMonitorDomainContext();
LoadOperation loadOP = ctx.Load(ctx.GetGisnewdataQuery());
TruckMonitorData.ItemsSource = loadOP.Entities;

AddTruckGraphics();
}

//void AddTruckGraphics()
//{
// string gpsNMEASentences = "125.3282,43.8528\n" + "125.3282,43.8526\n" + "125.3282,43.8524\n" + "125.3282,43.8522\n" + "125.3282,43.8520\n" + "125.3282,43.8518\n";
// string[] gpsNMEASentenceArray = gpsNMEASentences.Split('\n');

// GraphicsLayer graphicsLayer = jlmap.Layers["TruckMonitorLayer"] as GraphicsLayer;

// for (int i = 0; i < gpsNMEASentenceArray.Length - 1; i++)
// {
// string[] gpsNMEASentence = gpsNMEASentenceArray[i].Split(',');

// Graphic graphic = new Graphic()
// {
// Geometry = new MapPoint(Convert.ToDouble(gpsNMEASentence[0]), Convert.ToDouble(gpsNMEASentence[1])),
// Symbol =CustomAutoShadowMarkerSymbol
// };
// graphicsLayer.Graphics.Add(graphic);

// }

//}

void AddTruckGraphics()
{
SL3TruckMonitorDomainContext sl3dc = new SL3TruckMonitorDomainContext();
LoadOperation loadOP = sl3dc.Load(sl3dc.GetGisnewdataQuery());
loadOP.Completed += new EventHandler(loadOP_Completed);
}

void loadOP_Completed(object sender, EventArgs e)
{
LoadOperation op = (LoadOperation)sender;
if (!op.HasError)
{
gisnewdata gnd = op.Entities.FirstOrDefault();

string x = gnd.ch3;
string y = gnd.ch2;

GraphicsLayer graphicsLayer = jlmap.Layers["TruckMonitorLayer"] as GraphicsLayer;

Graphic graphic = new Graphic()
{
Geometry = new MapPoint(Convert.ToDouble(x), Convert.ToDouble(y)),
Symbol =CustomAutoShadowMarkerSymbol
};
graphicsLayer.Graphics.Add(graphic);
}
}
}
}

wjx8408
wjx8408 的头像
User offline. Last seen 16 周 6 天 ago. Offline
Joined: 04/04/2010
!!!

怎么没有人回答?学silverlight的人这么少吗?

wjx8408
wjx8408 的头像
User offline. Last seen 16 周 6 天 ago. Offline
Joined: 04/04/2010
ria service

跪求admin给出解答!

admin
admin 的头像
User offline. Last seen 14 小时 33 分钟 ago. Offline
Joined: 09/13/2009
re:wjx

你好!我看了一下你的问是,我觉得你不应用使用timer去做这个刷新数据的功能,你可以选择用pullingduplex的通信方式,或socket等实时性强的网络通信形式去实现。因为ria server有时候第一次方问的话未必5秒就能返回数据。这取决于网络还程序数据处理逻辑。你可以参考我的其他关于silverlight网络通信的文章.相信对你的项目会有一定帮助。



https://mcp.microsoft.com/authenticate/validatemcp.aspx
Transcript ID (868224)
Access Code (jacle169)