近期公司在做一个酒吧里的项目。
项目功能模块大体分3个:
1:大战游戏
2:交朋识友
3:推广介绍
4.后台管理
整体技术架构:
游戏采用ShiVa 3D进行开发。
交朋识友和推广介绍用WPF进行实现。
因为ShiVa 3D不支持PC机上的多点触摸功能,
故把ShiVa 3D开发的游戏嵌入到WPF程序里,以实现多点触摸的功能。
现在我负责的部分是后台管理,
后台管理现在主要实现的功能有两点:绑定台号和IP之间的对应关系,上传推荐介绍的图片信息。
考虑整个项目用的数据量不大,而且避免服务器和客户端安装过多的东西,
所以整个项目的数据管理,采用XML。
这两天一直在百度“C#读写XML文件”,
网上看到很多类似的文章和实现方式。
最终自己采用的实现方式是:用DataSet来进行读写XML文件。
读XML文件:
DataSet ds = new DataSet();
string path = "...."//xml文件地址
if (File.Exists(path))
ds.ReadXml(path);
读简单,写也简单。
写其实就是对DataSet里面的数据进行增、删、查、改。
因为平时项目里DataTable用的最多,
所以对DataTable的操作还是很得心应手。
对DataTable进行编辑后,
直接输出XML文件就ok.
//新增一条数据
DataRow dr = myds.Tables[0].NewRow();
dr[0] = "1000";
dr[1] = "1215425";
dr[2] = "cindy";
myds.Tables[0].Rows.Add(dr);
path = "....";//输出路径
myds.WriteXml(path);
总结:用DataSet的ReadXml和WriteXml方法来实现XML的读写更方便。
2011年,
一去不复返。
11年没有惊天动地,
却是人生非常重要的一年。
4年,
老婆终于大学毕业,
异地相恋的苦和困难,
只有经历的过的人才明白。
11年里得到了双方父母的同意,
真正在一起了,
缘分这东西很难说清楚,
可遇也可求,
只有自己把握,自己争取,
才可能得到真爱。
看看身边的朋友,
有买房子的,
有结婚的,
有马上要当爸妈的,
。。。
我们没结婚,
没领红本本,
没有买房买车,
可是,
两个人为了共同的目标,
齐心协力快乐的奋斗着,
我想明天也将会是最幸福。
在此祝愿还是一个人的朋友,
12年结束自己的单身,找到真爱O(∩_∩)O~
11年大部分的工作嫁给了忙碌,
每天背个包包,匆匆忙忙,
地铁里冲的飞快快之一的是我,
电梯+楼梯的也有我。
大大小小的项目也参与了4,5个,
整体来说还算可以,
定义规范,使用工具,减少了大量的人工编码,
工欲善其事必先利其器嘛。
11年以成为历史,
不能重来,
那就学习、运动、奋战世界末日--2012 吧!
绑定主要是通过设置静态数据源,然后设置绑定控件的DisplayMemberPath和SelectedValuePath
界面代码:
View Code
xmlns:c="clr-namespace:WPF1" >
<Page.Resources>
<c:EmPAll x:Key="empAll"></c:EmPAll>
<c:AllData x:Key="allData"></c:AllData>
</Page.Resources>
<Grid>
<ComboBox Height="23" ItemsSource="{ StaticResource empAll}" DisplayMemberPath="Name" SelectedValuePath="ID" HorizontalAlignment="Left" Margin="47,37,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"/>
<ListBox Height="60" ItemsSource="{ StaticResource allData}" DisplayMemberPath="Name" SelectedValuePath="ID" HorizontalAlignment="Left" Margin="48,133,0,0" Name="listBox1" VerticalAlignment="Top" Width="167"/>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="197,25,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click"/>
</Grid>
后台代码:
View Code
namespace WPF1
{
///<summary>
/// 绑定Combox.xaml 的交互逻辑
///</summary>
public partial class 绑定Combox : Page
{
public 绑定Combox()
{
InitializeComponent();
}
//获取选中的值
private void button1_Click(object sender, RoutedEventArgs e)
{
string val = comboBox1.SelectedValue.ToString();
var val2 = (listBox1.SelectedItem as Emp).Name;
MessageBox.Show(val + "," + val2);
}
}
public class Emp
{
public int ID { get; set; }
public string Name { get; set; }
}
public class EmPAll : System.Collections.ObjectModel.ObservableCollection<Emp>
{
public EmPAll()
{
this.Add(new Emp { ID = 1, Name = "A" });
this.Add(new Emp { ID = 2, Name = "B" });
}
}
public class AllData : System.Collections.ObjectModel.ObservableCollection<Emp>
{
public AllData()
{
for (int i = 0; i < 10; i++)
{
this.Add(new Emp { ID = i, Name = "Name" + i });
}
}
}
}
IF EXISTS(SELECT *FROM sysobjects WHERE name='sp_ContestSubmit')
DROP PROC sp_ContestSubmit
GO
-- =============================================
-- Author: zqt
-- Create date: 2011-11-25
-- Desc: 系统管理员批量给未交卷的考生交卷-竞赛
-- =============================================
Create proc sp_ContestSubmit
@GroupID int --考核ID
as
--申明一个游标
DECLARE MyCursor CURSOR
FOR select PK_UserExamID,FK_UserID,FK_ExamOrContestID from Score_UserExam where IsComplete=0 AND FK_ExamOrContestID in(select PK_ContestInfoID from Contest_Info where FK_ContestGroupID=@GroupID)
--打开一个游标
OPEN MyCursor
--循环一个游标
DECLARE @UserExamID int ,@UserID int ,@ExamManageID int
FETCH NEXT FROM MyCursor INTO @UserExamID, @UserID,@ExamManageID
WHILE @@FETCH_STATUS =0
BEGIN
--获取考试考试分数
DECLARE @UserExamScore int
select @UserExamScore=sum(Score) from Score_UserAnswer where FK_UserID=@UserID AND FK_UserExamID=@UserExamID
--修改考生交卷信息
UPDATE [Score_UserExam] SET [Score] =@UserExamScore,[IsComplete] = 1,[EndTime] = getdate(),[DurationSecs] = datediff(ss,BeginTime,getdate()) where PK_UserExamID=@UserExamID
FETCH NEXT FROM MyCursor INTO @UserExamID, @UserID,@ExamManageID
END
--关闭游标
CLOSE MyCursor
--释放资源
DEALLOCATE MyCursor
/* 测试
exec sp_ContestSubmit 1
*/
GO
View Code
1 StringBuilder sb = new StringBuilder();
2 if (arrService.Length > 0)
3 {
4 for (int i = 0; i < arrService.Length; i++)
5 {
6 if (string.IsNullOrEmpty(sb.ToString()))
7 {
8 sb.AppendFormat("INSERT INTO [SM_PackageEntry] select '{0}','{1}','{2}' ", servicePackageID, arrService[i][0], arrService[i][1]);
9 }
10 else
11 {
12 sb.AppendFormat(" UNION ALL select '{0}','{1}','{2}'", servicePackageID, arrService[i][0], arrService[i][1]);
13 }
14 }
15 //执行SQL
16 SqlHelper.ExecuteSql(sb.ToString());
17 sb.Clear();//清空SQL
18 }


