[C#]DataTable常用操作总结_AX
20xx年x月x日星期一 09:41
【引言】项目中经常使用DataTable,发现有好多东西,需要整理下. protected void Page_Load(object sender, EventArgs e)
{
//①Create a DataTable
DataTable dt = new DataTable("Table_AX");
//②Add columns for DataTable
//Method 1
dt.Columns.Add("column0",
System.Type.GetType("System.String"));
//Method 2
DataColumn dc = new DataColumn("column1",
System.Type.GetType("System.Boolean"));
dt.Columns.Add(dc);
//③Add rows for DataTable
//★Initialize the row
DataRow dr = dt.NewRow();
dr["column0"] = "AX";
dr["column1"] = true;
dt.Rows.Add(dr);
//★Doesn't initialize the row
DataRow dr1 = dt.NewRow();
dt.Rows.Add(dr1);
//④Select row
//Search the second row 如果没有赋值,则用is null来select DataRow[] drs = dt.Select("column1 is null");
DataRow[] drss = dt.Select("column0 = 'AX'");
//⑤Copy DataTable include data
DataTable dtNew = dt.Copy();
//⑥Copy DataTable only scheme
DataTable dtOnlyScheme = dt.Clone();
//⑦Operate one row
//★都是对dt的操作
//Method 1
DataRow drOperate = dt.Rows[0];
drOperate["column0"] = "AXzhz";
drOperate["column1"] = false;
//Method 2
drOperate[0] = "AXzhz";
drOperate[1] = false;
//Method 3
dt.Rows[0]["column0"] = "AXzhz";
dt.Rows[0]["column1"] = false;
//Method 4
dt.Rows[0][0] = "AXzhz";
dt.Rows[0][1] = false;
//⑧Evaluate another DataTable's row to current Datatable dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);
//⑨Use Rowstate
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //不知道怎么才能使Row的State变为DataRowState.Deleted //More further,怎样设置Row的State
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■ if (dt.Rows[0].RowState == DataRowState.Unchanged)
{
//Your logic
}
//⑩Convert to string
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw); dt.WriteXml(xw);
string s = sw.ToString();
//ⅰ.string convert to DataTable【Doesn't achieve it】
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //没有把string成功转换为DataTable ■■已实现,参见追加■■
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //DataTable dtConvert = new DataTable();
//System.IO.StringReader stream = new
System.IO.StringReader(s);
//System.Xml.XmlReader xtr = new
System.Xml.XmlTextReader(stream);
//dtConvert.ReadXml(xtr);
//ⅱ.Filter DataTable
//It's so strange that the second row has been filtered //the second row show in GridView never
//It means null field will be filter always.
//Filter the all conditions
dt.DefaultView.RowFilter = "column1 <> true";
//dt.DefaultView.RowFilter = "column1 = true";
dt.DefaultView.RowStateFilter = DataViewRowState.Added; //ⅲ.Sort row
//Stupid method
DataRow[] drsss = dt.Select(String.Empty, "column0 DESC , column1 ASC");
//Clever method
dt.DefaultView.Sort = "column0 , column1 ASC";
//ⅳ.Bind DataTable
//绑定的其实是DefaultView
gvTestDataTable.DataSource = dt;
gvTestDataTable.DataBind();
}
【追加】判断一个字符串是否为DataTable的列名
dtInfo.Columns.Contains("AX");
【追加】DataTable与XML的转换
protected void Page_Load(object sender, EventArgs e) {
DataTable dt_AX = new DataTable();
//dt_AX.Columns.Add("Sex", typeof(System.Boolean)); //DataRow dr = dt_AX.NewRow();
//dr["Sex"] = true;
//dt_AX.Rows.Add(dr);
string xml=ConvertBetweenDataTableAndXML_AX(dt_AX); DataTable dt = ConvertBetweenDataTableAndXML_AX(xml); }
public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)
{
System.IO.TextWriter tw = new System.IO.StringWriter(); //if TableName is empty, WriteXml() will throw Exception. dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;
dtNeedCoveret.WriteXml(tw);
dtNeedCoveret.WriteXmlSchema(tw);
return tw.ToString();
}
public DataTable ConvertBetweenDataTableAndXML_AX(string xml) {
System.IO.TextReader trDataTable = new
System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml"))); System.IO.TextReader trSchema = new
System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml"))); DataTable dtReturn = new DataTable();
dtReturn.ReadXmlSchema(trSchema);
dtReturn.ReadXml(trDataTable);
return dtReturn;
}【追加】排序的好方法
dt.DefaultView.Sort = "ID ,Name ASC";
dt=dt.DefaultView.ToTable();
第二篇:MATLAB常用函数总结
函数
一.函数查看
help elfun %列出初等函数
help specfun和help elmat %列出高级数学函数
mhelp %高级查看,例如mhelp abs
二.常用函数:
1.基本函数:
abs() %绝对值
sqrt %平方根
exp(n) %e的n次方
sin cos tan %三角函数asinacosatan %反三角函数
log() %自然对数
log10() %常数对数
lcm(x,y) %最小公倍数
gcd(x,y) %最大公约数
round() %四舍五入
floor() %取向负方向的整数
ceil() %取向正方向的整数
fix() %取向0方向的整数
find() %找到逻辑值的向量元素下标
inline() %定义函数,如f=inline('2*x')f =Inline function:f(x) = 2*x quad() %可对inline定义的函数进行数值积分
2.数据类型中用到的函数:
(1)字符串:
定义: exp: a=’hello’
转换: abs(a) %abs将字符串转换为ASC码
ans =104 101 108 108 111
setstr(a) %setstr将ASC码转换为字符串
三.多项式中用到的函数
见笔记1:四.多项式
四.符号表达式中用到的函数
(1)基本:
diff(f,x,2) %微分,函数f对x求二阶导。该函数也可作用于符号矩阵。
int(f,'x',1,3) %积分,函数f对x在区间[1,3]上的定积分。
int(f,'x',’a’,’b’) 在区间[a,b]上的定积分。
int(f,'x') 得到积分后的函数,常数项默认为0.
limit(f,x,a) %求函数f在x趋于a时的值
limit(f,x,a,’left’) %左趋于a,类似的,’right’,右趋于a
symsum(s,v,a,b) %自变量v在[a,b]间取值,对通项s的求和,可用于求数列和级数的和 例:syms k
S=symsum(1/(k*(k+1)),k,1,inf)
S =1
taylor(f,x,10) %f对x的泰勒级数展开至10阶
solve(f,x) %求解f的根x。也可以用作solve(‘1+x=sin(x)’),或解方程组:solve(f1,f2,…,fn) dsolve(‘常微分方程式’,’初始条件’)
%求解常微分方程。用Dy表示y’,用D2y表示y’’
例:y=dsolve('D2y=1+Dy','y(0)=1','Dy(0)=0') y =exp(t)-t
(2)符号表达式的运算函数:
symadd(A,B) %完成A+B的符号加法
symsub(A,B) %减法
symmul(A,B) %乘法
symdiv(A,B) %除法
sympow(F,n) %F的n次方运算
numden(F) %从有理形式转化为分子与分母形式,可用于分式化简,
得到结果用向量形式给出:[分子,分母]
numeric(F) %将F以数值形式表示
compose(f(x),g(x)) %复合成f(g(x))
finverse(f,x) %求f(x)的反函数
sym2poly(F) %将多项式系数转化为向量形式
poly2sym(c) %将向量形式的系数转化为符号多项式
(3)符号表达式的化简:
collect(F) %将表达式F中相同幂次的项合并
expand %将表达式展开
factor %将表达式因式分解
simplify %利用代数上的函数规则对表达式化简,可用于通分
simple ※尝试各种办法对符号多项式化简,并显示化简步骤;
可用[r,how]=simple(f)查看结果r和方法how
五.绘图函数:
1.二维绘图 (1)plot(x,y) %以x为横轴,y为纵轴绘制图形,其中x,y均为矩阵。也可plot(x,y1,x,y2,…) plot(x,y,’r + -’)图形修饰,详见笔记3 ,一 (2)fplot(fun,lims) %fun是所要绘制的函数,可以是函数名,M文件名,或可计算字符串
(3)ezplot() lims=[XMIN XMAX YMIN YMAX],限定绘图空间 fun可以是多个函数,采用如下形式:fplot('[sin(x),cos(x)]',[0,1]) %无需数据准备,直接画出图形。默认绘图区域[-2*pi,2*pi],
也可自行定义绘图区域ezplot(f,xmin,xmax)
%绘制极坐标图,theta为角度向量,tho为幅值向量
(4)polar(theta,rho,选项) 2.三维绘图 (1)plot3(x1,y1,z1,x2,y2,z2,…) %类似于plot函数,绘制三维曲线。详见笔记3 ,二 (2)mesh(x,y,z) %画网格线图
(3)surf(x,y,z) %画网格面图
(4)meshgrid(x,y) %格点化,例如:[X,Y]=meshgrid(x,y)
(5)peaks(n) %系统提供快速测试绘图函数,产生高斯分布矩阵。例如: z=peaks(40);mesh(z);
(6)subplot(n,m,k) %视图窗口分成n行m列个,当前视图放在第k个
(7)view(方位角,仰角) %设定观察三维图形的角度
主视图: view(0,0)
左视图: view(-90,0)
俯视图: view(0,90)
(8)sphere(n) %绘制球面,n越大,精度越高
(9)cylinder(R,n) %绘制柱面,R是柱面各切面圆的半径
(10)hidden on/off %打开/关闭观察三维图形的遮挡效果
(11)colorbar %在三维曲面图旁边绘制一个可以只是高度的彩色条
3.其他绘图函数:
loglog(x,y) %使用对数座标绘图
semilogx %横坐标为对数坐标轴,纵坐标为线性坐标轴
semilogy %横坐标为线性坐标轴,纵坐标为对数坐标轴
fill(x,y,’r’) %绘制实心图,可添加颜色
bar %绘制直方图,可以细分为bar,bar3,barh,bar3h
其中bar和bar3用来绘制二维和三维竖直直方图,barh,bar3h用来绘制水平直方图
例bar(x,y,0.5),若y为m行n列矩阵,则可视化结果分为m组,每组n个垂直柱,直方条宽度是0.5
如bar(x,[1,2,3;4,5,6;7,8,9])
hist %绘制直方图
pie %绘制饼图,例如x=[1,2,3,4,5];explode=[0,0,1,0,1]
%(explode中不为0的元素对应的x中元素会从饼图中突出)
pie(x,explode)
area %绘制面积图
quiver %绘制向量场图
stairs %绘制阶梯图
stem %绘制火柴杆图
errorbar %误差限图,errorbar(x,y,l,u,’选项’)表示以x为横坐标,y为纵坐标,l为误
差上限,u为误差下限绘图,还可以设置线型,颜色选项。
以上函数+3,如stem3(),可绘制相应三维图形
六.程序设计函数:
%见笔记4