在WPF中利用DataGrid显示数据库的数据

第二天blog除草。

当需要把数据库中的某个表的数据整个导出到界面显示的时候,在WPF中使用DataGrid(或许?)是最好的办法。我曾经打算使用ListView的,但是感觉每一个项都需要一个一个添加,非常麻烦,如果你有更好的办法可以下面留言。

首先从工具箱中拉出来一个DataGrid,会见到一个空白的框。

1

下一部就是添加显示的项了,以下是XAML文件中的代码,具体的后面开始讲解。

  <DataGrid x:Name="datagrid" AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="38,68,0,0" VerticalAlignment="Top" Height="103" Width="578" SelectionChanged="datagrid_SelectionChanged">
 <DataGrid.Columns>
 <DataGridTextColumn Width="200*" Header="卡号" Binding="{Binding Ui_CardNo}"/>
 <DataGridTextColumn Width="100*" Header="用户名" Binding="{Binding Ui_Name}"/>
 <DataGridTextColumn Width="150*" Header="联系电话" Binding="{Binding Ui_Moblie}"/>
 <DataGridTextColumn Width="120*" Header="车牌号" Binding="{Binding Ui_Plate}"/>
 <DataGridTextColumn Width="0" Header="记录时间" Binding="{Binding Rc_Time}" Visibility="Hidden"/>
 </DataGrid.Columns>
 </DataGrid>

在DataGrid标签之间添加一个<DataGrid.Columns></DataGrid.Columns>标签,再从里面利用<DataGridTextColumn>标签添加各项。常用的属性分别是Header项的名字;Binding绑定DataTable中的列名;Width该项列所占的宽度,基本上都是要指定的,它默认的大小很小,不会根据内容的量变大的;另外就是Visibility是否显示出来。

SqlConnection conn = new SqlConnection("连接参数");
string sql = "SELECT * FROM XXX";
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataTable dt = new DataTable();
DataSet ds = new DataSet();
da.Fill(ds, "Table");
dt = ds.Tables["Table"];
datagrid.ItemsSource = dt.DefaultView;

完成这段代码之后就完成了数据源的绑定了,不断的执行这段代码,程序就会自动的把数据库某个表的内容显示到DataGrid中了。

DataGrid中还有一些事件挺有用的,例如SelectionChanged之类的,后面有时间再慢慢搞。

在C#中使用串口简单总结 in wpf

SerialPort类总结

构造函数

指定端口名,波特率(必须),奇偶校验位,数据位,停止位(可选)

ex: SeralPort sp = new SerialPort(“COM3”,9600);

属性

重要部分

BytesToRead 需要输入的字节数  // 比较常用,可以在接收数据的时候,用于初始化字节数组。

BytesToWrite 需要输出的字节数

IsOpen 是否已经开启(open())串口

ReadBufferSize   读缓冲区大小

WriteBufferSize   写缓冲区大小

可选部分

ReadTimeout

WriteTimeout

Encoding  //这个类包含UTF, Unicode, ASCII之间的各种转码,还可以字节数组到字符串的各种转换。

方法

重要部分

Open()  打开串口  //实例化完成要首先执行,使用GetPortNames()这类静态方法的时候可以不用。

Close()  关闭串口

DiscardInBuffer()  清空输入缓冲区  //每次读取完成时,可以清空一下反正数据重复。

DiscardOutBuffer()  清空输出缓冲区

Write(Char[], Int32, Int32)  写字符数组

Write(Byte[], Int32, Int32)  写字节数组

Read(Char[], Int32, Int32)  写字符数组

Read(Byte[], Int32, Int32)  写字节数组

GetPortNames()  获取电脑已有端口号,数组,用foreach遍历到ComboBox效果更佳

今天的blog除草完成

在C#中使用打印机的学习笔记

首先在Visual Studio右侧引用程序集System.Drawing,并添加该命名空间。

using System.Drawing;
class test
{
  public int main()
  {
    PrintDocument doc = new PrintDocument();
    doc.PrintPage += doc_print(); //添加一个打印方法
  }
  private void doc_print(object sender, PrintPageEventArgs e)
  {
    //具体要打印的内容,可以是Bitmap类型的图片数据或文字
  }
  doc.Print();
}

 

使用 e.Graphics.DrawString(“输入要打印的文字内容”, new Font("微软雅黑", 10, FontStyle.Regular), System.Drawing.Brushes.Black,10,160);
//第一个参数略;第二个是Font的实例化;第三个选择字体的颜色,要从System命名空间开始输入,因为有重复的Brushes;第四五个,分别是打印在纸上的XY轴位置。
//Font实例中,第一个参数是字体名称,第二个是字体大小,第三个是字体样式,反正Regular是正的,其他估计是歪的吧= =

e.Graphics.DrawImageUnscaledAndClipped(bitmap, new System.Drawing.Rectangle(30, 5, 128, 128));//第一个参数的bitmap是存储bitmap类型图片的变量,第二个是Rectangle的实例,实例化的参数分别是(X轴,Y轴,重新调整的宽,高)

如果不需要重新修整,可以直接使用
e.Graphics.DrawImage(bitmap,x,y);//xy分别为打印的内容在纸上的位置。

另外如果要弹出选择打印机的窗口,可以是用PrintDialog类实现。

吐槽:WP打代码真的好麻烦诶,复制过来缩进就没了,在WP上写各种手滑按Tab。

无线网卡开WiFi的折腾记录

在学校宿舍,由于有XX上网认证客户端的原因,很多人都用自己的网卡共享WiFi网络给自己的手机使用,并且再加上某国电信架设的公共WiFi,导致2.4G信道挤满了各种设备。

我为了开WiFi也顺手买了张芯片是MT7601的网卡,但是发现无论切换到什么信道,都还是有那么一丁点丢包,作为一个强迫症患者,这个当然不能忍。经过几番搜索,发现ralink的卡把多媒体/游戏环境打开后,网络就没有丢包了。

另外,某达自带的AP软件根本不能用,都没有DHCP,手机用多麻烦,然后就下了个猎豹WiFi。发现这个软件并不能调信道,默认地开到1信道,然后发现可以到网卡的设置那里调网卡的搜索范围(频道代码),从而调整WiFi的信道,不过不足的地方还是有的,只能调1,3,5,10,14(卧槽,14信道要怎么用啊)

Linux中使用Socks5运行命令

Linux系统中有很多软件源服务器都在国外,在天朝使用Linux系统时,难免会遇到很慢的情况,所以可以使用SS(Shadowsocks)进行科学上网,但是这个工具需要用Socks5去访问,Linux并没有自带这样的工具。这个时候就可以用到tsocks了。

1.安装

Ubuntu/Debian

apt-get install tsocks

Centos

yum install tsocks

2.配置

vim /etc/tsocks.conf

将Server = 192.168.0.1,修改成ss客户端所在的IP地址

3.完成后

将需要进行socks5代理运行的命令,在命令前加上tsocks运行

如:tsocks yum install xxx   或   sudo tsocks yum install xxx

记一次配置iptables的烦恼

起因

之前在折腾用KVM搞虚拟化,却发现物理机的iptables一旦默认的规则是DROP的时候,那台机器上的虚拟机全部都不能访问了。但是物理机也不能不开防火墙啊。所以就搜了在有网桥的情况下,怎么配置iptables才能DROP网桥内制定的IP,但是并没有相关搜索结果。刚开始考虑过加一条目标IP是物理机IP全为DROP的规则,然后再加一条22端口的ACCEPT的规则。但后来了解到iptables是按照规则先后顺序生效的,因此可能iptables遇到第一条全DROP,第二条22端口ACCEPT就不生效了。

解决办法:

修改sysctl.conf文件:vim /etc/sysctl.conf
添加:net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

生效:sysctl -p

这样iptables就不会干涉网桥内其他主机的流量,虚拟机里面就可以使用自己的防火墙进行防护。

某辕云(lan)平(dong)台(xi)折腾总结

首先,我先说说这个云(lan)(dong)(xi)安装时候的一些技巧

一、首先安装好Centos系统,安装步骤参考操作手册(附件)

需要注意的是,Kdump关闭后,系统会询问是否重启,在这里我们需要按,因为可以扔到后面安装加密狗后重启。避免浪费不必要的时间

kdump

二、管理节点的系统配置

(1)修改完IP之后,就可以直接用putty等工具,远程连接都服务器进行操作。为了操作能同时进行,现在先把要用的hycloud包和Packages包(yum源)上传到服务器的/usr目录,然后在上传的过程中顺便关闭selinux、iptables和修改主机名。

(2)解压hycloud包,安装加密狗驱动

(4.14操作文档所缺少的步骤)

tar -zxvf  /usr/hycloud.tar

cd /usr/hycloud/superdog

cp * /usr/lib

rpm -Uvh superdog-1.0-1.i386.rpm

安装完成后,重启。

Note:如果忘记安装加密狗,会出现登陆后管理平台出现找不到资源的错误。

(3)备份yum源配置文件时,请注意不要把文件夹创建到

/etc/yum.repos.d/ 中

(4)注意解压出来的文件夹名,需要确保在yum配置文件中的baseurl的正确性。如果URL不正确,则会出现错误:

Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
file:///usr/hycloud/Packages/repodata/repomd.xml: [Errno 14] Could not open/read file:///usr/hycloud/Packages/repodata/repomd.xml

(5)在使用updateuuid时,如出现错误,则需要检查数据库用户cloud是否有多个主机名的用户,数据库内的数据是否完整。

如果出现的错误是cloud用户不能访问某个库或表,则尝试删除所有cloud用户,重新增加cloud用户。

首先是进入数据库 mysql -u root -p ,输入密码

切换数据库:use 库名;
查看库中的数据表:select * from 表名;
删除用户:drop user ‘用户名’@’主机地址';
删除表:drop table 表名;
删除库:drop database 库名;
创建cloud用户:grant all privileges on *.* to ‘cloud’@’localhost’ identified by ‘cloud’ with grant option;
创建库:create database 库名
查看存在的库:show databases;
查看存在的表:show tables;
查看用户:use mysql;select user, host, password from user;

如果在管理平台页面出现登陆后出错,检查cloud库中account和user表中是否有数据,如无则运行

cloudstack-setup-management

(6)在O 配置服务端IP地址,这一步骤中,该命令只是修改service.properties文件中的两个部分,将文件中10.48.200.1的IP更改为管理节点的IP。直接用vim打开修改,省去记住这么长的命令的麻烦。

(7)日志是解决问题的好帮手,在安装完cloudstack-management后,可以输入 tail -50f /usr/share/cloudstack-management/logs/catalina.out | cat -n 观察各种信息。

(7)每次修改或重置数据库,都要注意前后端的重启,步骤如下:

killall java

等日志输出停止后,再开启前后端

service cloudstack-management restart

/usr/hycloud/hyctl start

启动前端时,不需要管是否出现已杀死。

(8)在输入命令导入系统模板时,巧用tab键补全功能去记忆路径。

三、安装存储节点的注意事项

注意运行的主机内存是否4G以上,是否开启虚拟化(重要)。

如在虚拟机中安装,则需要注意虚拟化是否已经开启。如果没有开启虚拟化,在后面添加虚拟机的步骤中,则有可能无法添加。

四、管理平台页面操作注意

(1)修改三项参数

nas

 

该项参数是NAS服务器的地址,按照操作手册的操作,该IP就是管理节点的IP地址/24。

修改三项参数后,需要进行一次前后端的重启(本文第二点7项)。如果没有重启,则可能出现模板上传出错的问题。

(2)添加zone,pod,host

zone

 

名称:随便填

两个DNS:与网关相同即可

来宾CIDR:指的是虚拟机内部网的IP段,默认为10.1.1.0/24,保持默认,请勿与图片填写相同。

关于CIDR:http://zh.wikipedia.org/wiki/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1

gateway

此处填写的是,虚拟机对外网访问所使用的IP和网关,不能来宾CIDR的网段相同,否则会出现机柜无法添加的问题。

pod

 

(请勿按照图片上的内容进行填写)

提供点名称:pod或随便

预留的网关和IP最好和上一步的不一样,不能与来宾CIDR,否则将出现无法添加机柜或主机问题。

VLAN和群集名称如图所示

VLAN

cluster

 

主机名称:XenServer的IP地址

用户名:ssh登陆的用户名

密码:ssh登陆的密码

host

 

nfs服务器的地址均为管理节点的IP

pri sec

 

===========该部分未完================

五、在此次练习安装的过程中,所遇到的一些问题

(1)Q:

QA1

A:DB Exception,重置数据库,删除所有库(除mysql,XX_information库),重新使用cloudstack-setup-database命令导入数据库。

(2)Q:

QA2

A:检查service.properties是否填写正确,如正确,则尝试重启前后端。

最后,这个管理平台其实就是为CloudStack做的UI。该平台的操作手册并不是很完整,所以看一遍CloudStack官方的参考文档很重要。

CloudStack安装部署过程:

http://heylinux.com/archives/2093.html

CloudStack官方参考文档:

http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.0.1-incubating/html-single/Installation_Guide/

简单iptables笔记

iptables真是一个强大的东西,既可以当防火墙用,也可以做NAT,还能搞透明转发(不知道那个功能是不是这样说)。

一、设置默认行为(INPUT,FORWARD,OUTPUT)

iptables -P XXX(表名) ACCEPT(接受,不建议)/DROP(丢弃)

例如入的全部丢了:iptables -P INPUT DROP

设置默认行为之前请确认是否已经输入好,一些接受的规则,例如22(SSH)。如果没有设置好就输入全部DROP,将会出现无法远程连接上。如果不小心按了,也没问题,重启就好,因为规则还没保存。

二、开启个别端口

iptables -A INPUT -p tcp/udp –dport 端口 -j ACCEPT

例如开启SSH:iptables -A INPUT -p tcp –dport 22 -j ACCEPT

三、端口映射

由于校园网封锁了22端口+一些常用的VPN协议端口,没法好好的在教室和图书馆用SSH连上服务器。最近又搞了个VPS,却忘了之前是怎么弄那个端口转发的(把20端口转发到22端口,实现20和22端口同时可以使用SSH)。后来百度了一会,发现可以用很多种方法实现。

例如有:iptables -t nat -A PREROUTING -p tcp  –dport 8080 -j REDIRECT –to-ports 80 (把8080端口转发到80端口)

如果是转发都其他ip的话就用:iptables -t nat -A PREROUTING -p tcp –dport 接收端口 -d 本机地址 -j DNAT –to-destination 目标IP:目标端口

未完。

折腾学校的认证客户端成功了

过程

电信为了不让学生插路由,搞了802.1X认证,用的是中兴的交换机。每一开机上网,除了要拨号还多了一个中兴认证客户端。这个东西很渣,在win8各种掉线,而且用WiFi很麻烦,要开着带有Windows系统的电脑,所以我一直想用一些第三方代替了。但是自己只是一只菜鸟,C语言也刚学,也不是学的很深入;Linux更是一窍不通,所以一直。我就上网找这方面的软件,在Google Code找到几个开源的,广科院和广东海洋学校的。当我兴高采烈的打算试试能不能用的时候,发现换了客户端(当时不知道)。这时候蛋疼了,不懂Linux和C语言就算了,现在还可能要反编译。当我感到学习的路漫漫时,我发现大二大三用是原本中兴提供的客户端。抱着再试一试的心态,我借了他们的一个账号来试试这些第三方客户端,我发现可以用。

正文

我用一个闲置的便携式路由器刷了一个OpenWrt系统,它是基于Linux系统的,所以有Linux系统用的第三方认证客户端的源码,把它再做进路由器就不难了。刚好我这个路由器的芯片有编译好的版本,所以就能直接上了,连编译都不用。

由于路由器还有一些问题(网口只有一个简直蛋疼),不懂怎么设置OpenWrt,所以拿了Ubuntu来尝试了一下QQ截图20150110225358

一看用大三的账号就成功了,我基本可以确认我那次的确作死了。

总结:因为想用第三方客户端的欲望驱动着我,我基本把鸟哥Linux基本篇看完了,接下来就是服务器篇,向运维的方向学习。(不过好多命令看完之后就忘记了,要不断复习和使用加深记忆,好蛋疼)

买了个256G的SSD

由于笔记本之前在用win8,然后win8有个莫名其妙会有进程大量占用硬盘。随着经常莫名其妙的卡住,决定必须上个SSD爽一下。

刚开始用SSD的时候,不太清楚什么4K对齐,还有什么AHCI模式。后来发现没开AHCI的话,SSD的速度只是比磁盘快一点。

QQ截图20141109103742

装好测了一下速度

QQ截图20141123130213

用上之后,开机快了N倍,VS秒开,各种程序秒开的感觉超爽。不过只是在打开一些大软件感觉快了,一些以前对磁盘没什么压力的程序,感觉上没什么大的变化。平时除了试试自己边学边写的C程序打开VS感觉快了,其它改变不大。买回来主要是想试试用SSD,体验一下什么是快。

有很多东西想买,但是钱却不是很多。用了三年左右的LED显示器,最近把它擦干净,发现有几个坏点了又想换掉了。而且跟我自己笔记本的IPS对比了一下,更想换了。硬盘用想买个更大的,放电影、美剧、动画什么的,最近人人影视(虽VPN可以访问海外版)和射手挂了,好担心以后只能看手撕鬼子过日子了,我也不喜欢换那些乱七八糟的网络游戏。