
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
	<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head><card id="MainCard" title="&#x6B22;&#x8FCE;&#x5149;&#x4E34;"><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a><br/>&nbsp;</p><p><b>&#x6807;&#x9898;&#x3A;</b> &#x45;&#x66;&#x66;&#x65;&#x63;&#x74;&#x69;&#x76;&#x65;&#x20;&#x43;&#x23;&#x20;&#x539F;&#x5219;&#x32;&#x33;&#xFF1A;&#x907F;&#x514D;&#x8FD4;&#x56DE;&#x5185;&#x90E8;&#x7C7B;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;</p><p><b>&#x4F5C;&#x8005;&#x3A;</b> &#x64;&#x6E;&#x61;&#x77;&#x6F;</p><p><b>&#x65E5;&#x671F;&#x3A;</b> &#x32;&#x30;&#x30;&#x39;&#x2D;&#x31;&#x32;&#x2D;&#x33;&#x31;&#x20;&#x30;&#x39;&#x3A;&#x33;&#x37;&#x20;&#x41;&#x4D;</p><p><b>&#x5206;&#x7C7B;&#x3A;</b> <a href="wap.asp?do=showLog&amp;cateID=5">&#x57;&#x65;&#x62;&#x7F16;&#x7A0B;</a></p><p><b>&#x5185;&#x5BB9;&#x3A;</b> &#x4F60;&#x5DF2;&#x7ECF;&#x77E5;&#x9053;&#xFF0C;&#x6240;&#x8C13;&#x7684;&#x53EA;&#x8BFB;&#x5C5E;&#x6027;&#x5C31;&#x662F;&#x6307;&#x8C03;&#x7528;&#x8005;&#x65E0;&#x6CD5;&#x4FEE;&#x6539;&#x8FD9;&#x4E2A;&#x5C5E;&#x6027;&#x3002;&#x4E0D;&#x5E78;&#x8FD0;&#x7684;&#x662F;&#xFF0C;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x76F4;&#x6709;&#x6548;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F60;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x5C5E;&#x6027;&#xFF0C;&#x5B83;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#xFF0C;&#x90A3;&#x4E48;&#x8C03;&#x7528;&#x8005;&#x5C31;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x516C;&#x5171;&#x6210;&#x5458;&#xFF0C;&#x4E5F;&#x5305;&#x62EC;&#x4FEE;&#x6539;&#x8FD9;&#x4E9B;&#x5C5E;&#x6027;&#x7684;&#x72B6;&#x6001;&#x3002;&#x4F8B;&#x5982;&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public DataSet Data<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _ds;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>DataSet ds = bizObj.Data;<br/>// Not intended, but allowed:<br/>ds.Tables.Clear( ); // Del&#101;tes all data tables.<br/>&#x4EFB;&#x4F55;MyBusinessObject&#x7684;&#x516C;&#x5171;&#x5BA2;&#x6237;&#x90FD;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x4F60;&#x7684;&#x5185;&#x90E8;dateset&#x3002;&#x4F60;&#x521B;&#x5EFA;&#x7684;&#x5C5E;&#x6027;&#x7528;&#x6765;&#x9690;&#x85CF;&#x7C7B;&#x7684;&#x5185;&#x90E8;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x4F60;&#x63D0;&#x4F9B;&#x4E86;&#x65B9;&#x6CD5;&#xFF0C;&#x8BA9;&#x77E5;&#x9053;&#x8BE5;&#x65B9;&#x6CD5;&#x7684;&#x5BA2;&#x6237;&#x719F;&#x7EC3;&#x7684;&#x64CD;&#x4F5C;&#x6570;&#x636E;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x4F60;&#x7684;&#x7C7B;&#x53EF;&#x4EE5;&#x7BA1;&#x7406;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x7684;&#x4EFB;&#x4F55;&#x6539;&#x53D8;&#x3002;&#x7136;&#x800C;&#xFF0C;&#x53EA;&#x8BFB;&#x5C5E;&#x6027;&#x5BF9;&#x4E8E;&#x7C7B;&#x7684;&#x5C01;&#x88C5;&#x6765;&#x8BF4;&#x5F00;&#x4E86;&#x4E00;&#x4E2A;&#x540E;&#x95E8;&#x3002;&#x5F53;&#x4F60;&#x8003;&#x8651;&#x8FD9;&#x4E9B;&#x95EE;&#x9898;&#x65F6;&#xFF0C;&#x5B83;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x8BFB;&#x53EF;&#x5199;&#x5C5E;&#x6027;&#xFF0C;&#x800C;&#x662F;&#x4E00;&#x4E2A;&#x53EA;&#x8BFB;&#x5C5E;&#x6027;&#x3002;<br/>&#x6B22;&#x8FCE;&#x6765;&#x5230;&#x4E00;&#x4E2A;&#x7CBE;&#x5F69;&#x7684;&#x57FA;&#x4E8E;&#x5F15;&#x7528;&#x7684;&#x7CFB;&#x7EDF;&#xFF0C;&#x4EFB;&#x4F55;&#x8FD4;&#x56DE;&#x5F15;&#x7528;&#x7684;&#x6210;&#x5458;&#x90FD;&#x4F1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x53E5;&#x67C4;&#x3002;&#x4F60;&#x7ED9;&#x4E86;&#x8C03;&#x7528;&#x8005;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#x7684;&#x53E5;&#x67C4;&#xFF0C;&#x56E0;&#x6B64;&#x8C03;&#x7528;&#x8005;&#x4FEE;&#x6539;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x67D0;&#x4E2A;&#x5185;&#x90E8;&#x5F15;&#x7528;&#x65F6;&#xFF0C;&#x4E0D;&#x518D;&#x9700;&#x8981;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x3002;<br/>&#x5F88;&#x6E05;&#x695A;&#xFF0C;&#x4F60;&#x60F3;&#x9632;&#x6B62;&#x8FD9;&#x6837;&#x7684;&#x4E8B;&#x60C5;&#x53D1;&#x751F;&#x3002;&#x4F60;&#x4E3A;&#x4F60;&#x7684;&#x7C7B;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#xFF0C;&#x540C;&#x65F6;&#x5E0C;&#x671B;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x3002;&#x4F60;&#x4E0D;&#x5E0C;&#x671B;&#x7528;&#x6237;&#x5728;&#x4E0D;&#x660E;&#x767D;&#x4F60;&#x7684;&#x610F;&#x56FE;&#x65F6;&#xFF0C;&#x8BBF;&#x95EE;&#x5E76;&#x4FEE;&#x6539;&#x5BF9;&#x8C61;&#x7684;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x3002;&#x4F60;&#x6709;&#x56DB;&#x4E2A;&#x7B56;&#x7565;&#x6765;&#x4FDD;&#x62A4;&#x4F60;&#x7684;&#x5185;&#x90E8;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4E0D;&#x88AB;&#x65E0;&#x610F;&#x7684;&#x4FEE;&#x6539;&#xFF1A;&#x503C;&#x7C7B;&#x578B;&#xFF0C;&#x6052;&#x5B9A;&#x7C7B;&#x578B;&#xFF0C;&#x63A5;&#x53E3;&#x548C;&#x5305;&#x88C5;(&#x6A21;&#x5F0F;)&#x3002;<br/>&#x503C;&#x7C7B;&#x578B;&#x5728;&#x901A;&#x8FC7;&#x5C5E;&#x6027;&#x8BBF;&#x95EE;&#x65F6;&#xFF0C;&#x662F;&#x6570;&#x636E;&#x7684;&#x62F7;&#x8D1D;&#x3002;&#x5BA2;&#x6237;&#x5BF9;&#x7C7B;&#x7684;&#x62F7;&#x8D1D;&#x6570;&#x636E;&#x6240;&#x505A;&#x7684;&#x4EFB;&#x4F55;&#x4FEE;&#x6539;&#xFF0C;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x5230;&#x5BF9;&#x8C61;&#x7684;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x3002;&#x5BA2;&#x6237;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x9700;&#x6C42;&#x968F;&#x610F;&#x7684;&#x4FEE;&#x6539;&#x62F7;&#x8D1D;&#x7684;&#x6570;&#x636E;&#x3002;&#x8FD9;&#x5BF9;&#x4F60;&#x7684;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x6CA1;&#x6709;&#x4EFB;&#x610F;&#x5F71;&#x54CD;&#x3002;<br/>&#x6052;&#x5B9A;&#x7C7B;&#x578B;&#xFF0C;&#x4F8B;&#x5982;System.String&#xFF0C;&#x4E5F;&#x662F;&#x5B89;&#x5168;&#x7684;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x6216;&#x8005;&#x5176;&#x5B83;&#x6052;&#x5B9A;&#x7C7B;&#x578B;&#x3002;&#x6052;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x5B89;&#x5168;&#x6027;&#x544A;&#x8BC9;&#x4F60;&#xFF0C;&#x6CA1;&#x6709;&#x5BA2;&#x6237;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x5B57;&#x7B26;&#x4E32;&#x3002;&#x4F60;&#x7684;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x662F;&#x5B89;&#x5168;&#x7684;&#x3002;<br/>&#x7B2C;&#x4E09;&#x4E2A;&#x9009;&#x62E9;&#x5C31;&#x662F;&#x5B9A;&#x4E49;&#x63A5;&#x53E3;&#xFF0C;&#x4ECE;&#x800C;&#x5145;&#x8BB8;&#x5BA2;&#x6237;&#x8BBF;&#x95EE;&#x5185;&#x90E8;&#x6210;&#x5458;&#x7684;&#x90E8;&#x4EFD;&#x529F;&#x80FD;(&#x53C2;&#x89C1;&#x539F;&#x5219;19)&#x3002;&#x5F53;&#x4F60;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x81EA;&#x5DF1;&#x7684;&#x7C7B;&#x65F6;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x4E00;&#x4E9B;&#x8BBE;&#x7F6E;&#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x6765;&#x652F;&#x6301;&#x5BF9;&#x7C7B;&#x7684;&#x5B50;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x8BBE;&#x7F6E;&#x3002;&#x901A;&#x8FC7;&#x8FD9;&#x4E9B;&#x63A5;&#x53E3;&#x6765;&#x66B4;&#x9732;&#x4E00;&#x4E9B;&#x529F;&#x80FD;&#x51FD;&#x6570;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5C3D;&#x53EF;&#x80FD;&#x7684;&#x51CF;&#x5C11;&#x4E00;&#x4E9B;&#x5BF9;&#x6570;&#x636E;&#x7684;&#x65E0;&#x610F;&#x4FEE;&#x6539;&#x3002;&#x5BA2;&#x6237;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x4F60;&#x63D0;&#x4F9B;&#x7684;&#x63A5;&#x53E3;&#x8BBF;&#x95EE;&#x7C7B;&#x7684;&#x5185;&#x90E8;&#x5BF9;&#x8C61;&#xFF0C;&#x800C;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x5E76;&#x4E0D;&#x5305;&#x542B;&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x5168;&#x90E8;&#x7684;&#x529F;&#x80FD;&#x3002;&#x5728;DataSet&#x4E0A;&#x66B4;&#x9732;&#x4E00;&#x4E2A;IListsource&#x63A5;&#x53E3;&#x5C31;&#x662F;&#x8FD9;&#x79CD;&#x7B56;&#x7565;&#xFF0C;&#x53EF;&#x4EE5;&#x963B;&#x6B62;&#x4E00;&#x4E9B;&#x6709;&#x60F3;&#x6CD5;&#x7684;&#x7A0B;&#x5E8F;&#x5458;&#x6765;&#x731C;&#x6D4B;&#x5B9E;&#x73B0;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x4EE5;&#x53CA;&#x5F3A;&#x5236;&#x8F6C;&#x6362;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x548C;&#x7A0B;&#x5E8F;&#x5458;&#x4ED8;&#x51FA;&#x66F4;&#x591A;&#x7684;&#x5DE5;&#x4F5C;&#x4EE5;&#x53CA;&#x53D1;&#x73B0;&#x66F4;&#x591A;&#x7684;BUG&#x90FD;&#x662F;&#x81EA;&#x627E;&#x7684;(&#x8BD1;&#x6CE8;&#xFF1A;&#x8FD9;&#x4E00;&#x53E5;&#x7406;&#x89E3;&#x53EF;&#x80FD;&#x5B8C;&#x5168;&#x4E0D;&#x5BF9;&#xFF0C;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x81EA;&#x884C;&#x53C2;&#x8003;&#x539F;&#x6587;&#xFF1A;But programmers who go to that much work to cr&#101;ate bugs get what they deserve.)&#x3002;<br/>System.Dataset&#x7C7B;&#x540C;&#x65F6;&#x4E5F;&#x4F7F;&#x7528;&#x4E86;&#x6700;&#x540E;&#x4E00;&#x79CD;&#x7B56;&#x7565;&#xFF1A;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x3002;DataViewManager&#x7C7B;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x79CD;&#x8BBF;&#x95EE;DataSet&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x800C;&#x4E14;&#x9632;&#x6B62;&#x53D8;&#x5411;&#x7684;&#x65B9;&#x6CD5;&#x6765;&#x8BBF;&#x95EE;DataSeto&#x7C7B;&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public DataView this[ string tableName ]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _ds.DefaultViewManager.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateDataView( _ds.Tables[ tableName ] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>DataView list = bizObj[ &#34;customers&#34; ];<br/>foreach ( DataRowView r in list )<br/>&nbsp;&nbsp;Console.WriteLine( r[ &#34;name&#34; ] );<br/>DataViewManager&#x521B;&#x5EFA;DataView&#x6765;&#x8BBF;&#x95EE;DataSet&#x91CC;&#x7684;&#x4E2A;&#x522B;&#x6570;&#x636E;&#x8868;&#x3002;DataViewManager&#x6CA1;&#x6709;&#x63D0;&#x4F9B;&#x4EFB;&#x4F55;&#x65B9;&#x6CD5;&#x6765;&#x4FEE;&#x6539;DataSet&#x91CC;&#x7684;&#x6570;&#x636E;&#x8868;&#x3002;&#x6BCF;&#x4E00;&#x4E2A;DataView&#x53EF;&#x4EE5;&#x88AB;&#x914D;&#x7F6E;&#x4E3A;&#x8BB8;&#x53EF;&#x4FEE;&#x6539;&#x4E2A;&#x522B;&#x6570;&#x636E;&#x5143;&#x7D20;&#xFF0C;&#x4F46;&#x5BA2;&#x6237;&#x4E0D;&#x80FD;&#x4FEE;&#x6539;&#x6570;&#x636E;&#x8868;&#xFF0C;&#x6216;&#x8005;&#x6570;&#x636E;&#x8868;&#x7684;&#x5217;&#x3002;&#x8BFB;/&#x5199;&#x662F;&#x9ED8;&#x8BA4;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x5BA2;&#x6237;&#x8FD8;&#x662F;&#x53EF;&#x4EE5;&#x6DFB;&#x52A0;&#xFF0C;&#x4FEE;&#x6539;&#xFF0C;&#x6216;&#x8005;&#x5220;&#x9664;&#x4E2A;&#x522B;&#x7684;&#x6570;&#x636E;&#x6761;&#x76EE;&#x3002;<br/>&#x5728;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x8BA8;&#x8BBA;&#x5982;&#x4F55;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x5B8C;&#x5168;&#x53EA;&#x8BFB;&#x7684;&#x6570;&#x636E;&#x89C6;&#x56FE;&#x65F6;&#x4EE5;&#x524D;&#xFF0C;&#x8BA9;&#x6211;&#x5148;&#x7B80;&#x5355;&#x7684;&#x4E86;&#x89E3;&#x4E00;&#x4E0B;&#x4F60;&#x5E94;&#x8BE5;&#x5982;&#x4F55;&#x54CD;&#x5E94;&#x516C;&#x5171;&#x7528;&#x6237;&#x7684;&#x4FEE;&#x6539;&#x3002;&#x8FD9;&#x662F;&#x5F88;&#x91CD;&#x8981;&#x7684;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x53EF;&#x80FD;&#x7ECF;&#x5E38;&#x8981;&#x66B4;&#x9732;&#x4E00;&#x4E2A;DataView&#x7ED9;UI&#x63A7;&#x4EF6;&#xFF0C;&#x8FD9;&#x6837;&#x7528;&#x6237;&#x5C31;&#x53EF;&#x4EE5;&#x7F16;&#x8F91;&#x6570;&#x636E;(&#x53C2;&#x89C1;&#x539F;&#x5219;38)&#x3002;&#x786E;&#x4FE1;&#x4F60;&#x5DF2;&#x7ECF;&#x4F7F;&#x7528;&#x8FC7;Windows&#x8868;&#x5355;&#x7684;&#x6570;&#x636E;&#x7ED1;&#x5B9A;&#xFF0C;&#x7528;&#x6765;&#x7ED9;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x5BF9;&#x8C61;&#x79C1;&#x6709;&#x6570;&#x636E;&#x7F16;&#x8F91;&#x3002;DataSet&#x91CC;&#x7684;DataTable&#x5F15;&#x53D1;&#x4E00;&#x4E9B;&#x4E8B;&#x4EF6;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x53EF;&#x4EE5;&#x5F88;&#x5BB9;&#x6613;&#x7684;&#x5B9E;&#x73B0;&#x89C2;&#x67E5;&#x8005;&#x6A21;&#x5F0F;&#xFF1A;&#x4F60;&#x7684;&#x7C7B;&#x53EF;&#x4EE5;&#x54CD;&#x5E94;&#x5176;&#x5B83;&#x5BA2;&#x6237;&#x7684;&#x4EFB;&#x4F55;&#x4FEE;&#x6539;&#x3002;DataSet&#x91CC;&#x7684;DataTable&#x5BF9;&#x8C61;&#x4F1A;&#x5728;&#x6570;&#x636E;&#x8868;&#x7684;&#x4EFB;&#x4F55;&#x5217;&#x4EE5;&#x53CA;&#x884C;&#x53D1;&#x751F;&#x6539;&#x53D8;&#x65F6;&#x5F15;&#x53D1;&#x4E8B;&#x4EF6;&#x3002;ColumnChanging&#x548C;RowChanging&#x4E8B;&#x4EF6;&#x4F1A;&#x5728;&#x7F16;&#x8F91;&#x7684;&#x6570;&#x636E;&#x63D0;&#x4EA4;&#x5230;DataSet&#x524D;&#x88AB;&#x5F15;&#x53D1;&#x3002;&#x800C;ColumnChanged&#x548C;RowChanged&#x4E8B;&#x4EF6;&#x5219;&#x662F;&#x5728;&#x4FEE;&#x6539;&#x63D0;&#x4EA4;&#x540E;&#x5F15;&#x53D1;&#x3002;<br/>&#x4EFB;&#x4F55;&#x65F6;&#x5019;&#xFF0C;&#x5F53;&#x4F60;&#x671F;&#x671B;&#x7ED9;&#x516C;&#x5171;&#x5BA2;&#x6237;&#x63D0;&#x4F9B;&#x4FEE;&#x6539;&#x5185;&#x90E8;&#x6570;&#x636E;&#x7684;&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x90FD;&#x53EF;&#x4EE5;&#x6269;&#x5C55;&#x8FD9;&#x6837;&#x7684;&#x6280;&#x672F;&#xFF0C;&#x4F46;&#x4F60;&#x8981;&#x9A8C;&#x8BC1;&#x800C;&#x4E14;&#x54CD;&#x5E94;&#x8FD9;&#x4E9B;&#x6539;&#x53D8;&#x3002;&#x4F60;&#x7684;&#x7C7B;&#x5E94;&#x8BE5;&#x5BF9;&#x5185;&#x90E8;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4EA7;&#x751F;&#x7684;&#x4E8B;&#x4EF6;&#x505A;&#x4E00;&#x4E9B;&#x63CF;&#x8FF0;&#x3002;&#x4E8B;&#x4EF6;&#x53E5;&#x67C4;&#x901A;&#x8FC7;&#x66F4;&#x65B0;&#x8FD9;&#x4E9B;&#x5185;&#x90E8;&#x7684;&#x72B6;&#x6001;&#x6765;&#x9A8C;&#x8BC1;&#x548C;&#x54CD;&#x5E94;&#x6539;&#x53D8;&#x3002;<br/>&#x56DE;&#x5230;&#x539F;&#x6765;&#x7684;&#x95EE;&#x9898;&#x4E0A;&#xFF0C;&#x4F60;&#x60F3;&#x8BA9;&#x5BA2;&#x6237;&#x67E5;&#x770B;&#x4F60;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4F46;&#x4E0D;&#x8BB8;&#x505A;&#x4EFB;&#x4F55;&#x7684;&#x4FEE;&#x6539;&#x3002;&#x5F53;&#x4F60;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x5728;&#x4E00;&#x4E2A;DataSet&#x91CC;&#x65F6;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5F3A;&#x5236;&#x5728;DataTable&#x4E0A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;DataView&#x6765;&#x9632;&#x6B62;&#x4EFB;&#x4F55;&#x7684;&#x4FEE;&#x6539;&#x3002;DataView&#x7C7B;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x5C5E;&#x6027;&#xFF0C;&#x901A;&#x8FC7;&#x5B9A;&#x4E49;&#x8FD9;&#x4E9B;&#x5C5E;&#x6027;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA9;DataView&#x652F;&#x6301;&#x5728;&#x5B9E;&#x9645;&#x7684;&#x8868;&#x4E0A;&#x6DFB;&#x52A0;&#xFF0C;&#x5220;&#x9664;&#xFF0C;&#x4FEE;&#x6539;&#x751A;&#x81F3;&#x662F;&#x6392;&#x5E8F;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x88AB;&#x8BF7;&#x6C42;&#x7684;DataTable&#x4E0A;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x5668;&#xFF0C;&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7D22;&#x5F15;&#x5668;&#x6765;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x81EA;&#x5B9A;&#x4E49;&#x7684;DataView&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public IList this[ string tableName ]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataView view =<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ds.DefaultViewManager.Cr&#101;ateDataView<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( _ds.Tables[ tableName ] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowNew = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowDel&#101;te = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowEdit = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return view;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>&nbsp;&nbsp;&nbsp;&nbsp;IList dv = bizOjb[ &#34;customers&#34; ];<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ( DataRowView r in dv )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( r[ &#34;name&#34; ] );<br/>&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x6700;&#x540E;&#x4E00;&#x70B9;&#x6458;&#x5F55;(&#x7684;&#x4EE3;&#x7801;)&#x901A;&#x8FC7;&#x8BBF;&#x95EE;IList&#x63A5;&#x53E3;&#x5F15;&#x7528;&#xFF0C;&#x8FD4;&#x56DE;&#x8FD9;&#x4E2A;&#x5B9E;&#x9645;&#x6570;&#x636E;&#x8868;&#x4E0A;&#x7684;&#x89C6;&#x56FE;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x4EFB;&#x4F55;&#x7684;&#x96C6;&#x5408;&#x4E0A;&#x4F7F;&#x7528;IList&#x63A5;&#x53E3;&#xFF0C;&#x5E76;&#x4E0D;&#x4EC5;&#x9650;&#x4E8E;DataSet&#x3002;&#x4F60;&#x4E0D;&#x5E94;&#x8BE5;&#x53EA;&#x662F;&#x7B80;&#x5355;&#x7684;&#x8FD4;&#x56DE;DataView&#x5BF9;&#x8C61;&#x3002;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x518D;&#x6B21;&#x7B80;&#x5355;&#x7684;&#x53D6;&#x5F97;&#x7F16;&#x8F91;&#xFF0C;&#x6DFB;&#x52A0;/&#x5220;&#x9664;&#x7684;&#x80FD;&#x529B;&#x3002;&#x4F60;&#x8FD4;&#x56DE;&#x7684;&#x89C6;&#x56FE;&#x5DF2;&#x7ECF;&#x662F;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#xFF0C;&#x5B83;&#x4E0D;&#x8BB8;&#x53EF;&#x5728;&#x5217;&#x8868;&#x7684;&#x5BF9;&#x8C61;&#x4E0A;&#x505A;&#x4EFB;&#x4F55;&#x7684;&#x4FEE;&#x6539;&#x3002;&#x8FD4;&#x56DE;&#x7684;IList&#x6307;&#x9488;&#x786E;&#x4FDD;&#x5BA2;&#x6237;&#x6CA1;&#x6709;&#x50CF;DataView&#x5BF9;&#x8C61;&#x91CC;&#x8D4B;&#x4E8E;&#x7684;&#x4FEE;&#x6539;&#x6743;&#x5229;&#x3002;<br/>&#x4ECE;&#x516C;&#x5171;&#x63A5;&#x53E3;&#x4E0A;&#x66B4;&#x9732;&#x7ED9;&#x7528;&#x6237;&#x7684;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA9;&#x7528;&#x6237;&#x4FEE;&#x6539;&#x5BF9;&#x8C61;&#x5185;&#x90E8;&#x6210;&#x5458;&#xFF0C;&#x800C;&#x4E0D;&#x7528;&#x8BBF;&#x95EE;&#x8BE5;&#x5BF9;&#x8C61;&#x3002;&#x8FD9;&#x770B;&#x4E0A;&#x53BB;&#x4E0D;&#x53EF;&#x601D;&#x8BAE;&#xFF0C;&#x4E5F;&#x4F1A;&#x4EA7;&#x751F;&#x4E00;&#x4E9B;&#x9519;&#x8BEF;&#x3002;&#x4F60;&#x987B;&#x8981;&#x4FEE;&#x6539;&#x7C7B;&#x7684;&#x63A5;&#x53E3;&#xFF0C;&#x91CD;&#x65B0;&#x8003;&#x8651;&#x4F60;&#x6240;&#x66B4;&#x9732;&#x7684;&#x662F;&#x5F15;&#x7528;&#x800C;&#x4E0D;&#x662F;&#x503C;&#x7C7B;&#x578B;&#x3002;&#x5982;&#x679C;&#x4F60;&#x53EA;&#x662F;&#x7B80;&#x5355;&#x7684;&#x8FD4;&#x56DE;&#x5185;&#x90E8;&#x6570;&#x636E;&#xFF0C;&#x4F60;&#x5C31;&#x7ED9;&#x4E86;&#x522B;&#x4EBA;&#x673A;&#x4F1A;&#x53BB;&#x8BBF;&#x95EE;&#x5185;&#x90E8;&#x6210;&#x5458;&#x3002;&#x4F60;&#x7684;&#x5BA2;&#x6237;&#x53EF;&#x4EE5;&#x8C03;&#x7528;&#x6210;&#x5458;&#x4E0A;&#x4EFB;&#x4F55;&#x53EF;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x66B4;&#x9732;&#x63A5;&#x53E3;&#x6765;&#x9650;&#x5236;&#x4E00;&#x4E9B;&#x5185;&#x90E8;&#x79C1;&#x6709;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#xFF0C;&#x6216;&#x8005;&#x5305;&#x88C5;&#x5BF9;&#x8C61;&#x3002;&#x5F53;&#x4F60;&#x5E0C;&#x671B;&#x4F60;&#x7684;&#x5BA2;&#x6237;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x4F60;&#x7684;&#x5185;&#x90E8;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x4F60;&#x5E94;&#x8BE5;&#x5B9E;&#x73B0;&#x4F60;&#x81EA;&#x5DF1;&#x7684;&#x89C2;&#x5BDF;&#x8005;&#x6A21;&#x5F0F;&#xFF0C;&#x8FD9;&#x6837;&#x4F60;&#x7684;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x9A8C;&#x8BC1;&#x4FEE;&#x6539;&#x6216;&#x8005;&#x54CD;&#x5E94;&#x5B83;&#x4EEC;&#x3002;<br/>========================================================&nbsp;&nbsp;&nbsp;&nbsp;<br/>Item 23: Avoid Returning References to Internal Class Objects<br/>You&#39;d like to think that a read-only property is read-only and that callers can&#39;t modify it. Unfortunately, that&#39;s not always the way it works. If you cr&#101;ate a property that returns a reference type, the caller can access any public member of that object, including those that modify the state of the property. For example:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public DataSet Data<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _ds;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>DataSet ds = bizObj.Data;<br/>// Not intended, but allowed:<br/>ds.Tables.Clear( ); // Del&#101;tes all data tables.<br/>Any public client of MyBusinessObject can modify your internal dataset. You cr&#101;ated properties to hide your internal data structures. You provided methods to let clients manipulate the data only through known methods, so your class can manage any changes to internal state. And then a read-only property opens a gaping hole in your class encapsulation. It&#39;s not a read-write property, wh&#101;re you would consider these issues, but a read-only property.<br/>Welcome to the wonderful world of reference-based systems. Any member that returns a reference type returns a handle to that object. You gave the caller a handle to your internal structures, so the caller no longer needs to go through your object to modify that contained reference.<br/>Clearly, you want to prevent this kind of behavior. You built the interface to your class, and you want users to follow it. You don&#39;t want users to access o&#114; modify the internal state of your objects without your knowledge. You&#39;ve got four different strategies for protecting your internal data structures from unintended modifications: value types, immutable types, interfaces, and wrappers.<br/>Value types are copied when clients access them through a property. Any changes to the copy retrieved by the clients of your class do not affect your object&#39;s internal state. Clients can change the copy as much as necessary to achieve their purpose. This does not affect your internal state.<br/>Immutable types, such as System.String, are also safe. You can return strings, o&#114; any immutable type, safely knowing that no client of your class can modify the string. Your internal state is safe.<br/>The third option is to define interfaces that allow clients to access a subset of your internal member&#39;s functionality (see Item 19). When you cr&#101;ate your own classes, you can cr&#101;ate sets of interfaces that support subsets of the functionality of your class. By exposing the functionality through those interfaces, you minimize the possibility that your internal data changes in ways you did not intend. Clients can access the internal object through the interface you supplied, which will not include the full functionality of the class. Exposing the IListsource interface pointer in the DataSet is one example of this strategy. The Machiavellian programmers out there can defeat that by guessing the type of the object that implements the interface and using a cast. But programmers who go to that much work to cr&#101;ate bugs get what they deserve.<br/>The System.Dataset class also uses the last strategy: wrapper objects. The DataViewManager class provides a way to access the DataSet but prevents the mutator methods available through the DataSet class:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public DataView this[ string tableName ]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _ds.DefaultViewManager.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cr&#101;ateDataView( _ds.Tables[ tableName ] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>DataView list = bizObj[ &#34;customers&#34; ];<br/>foreach ( DataRowView r in list )<br/>&nbsp;&nbsp;Console.WriteLine( r[ &#34;name&#34; ] );<br/>The DataViewManager cr&#101;ates DataViews to access individual data tables in the DataSet. There is no way for the user of your class to modify the tables in your DataSet through the DataViewManager. Each DataView can be configured to allow the modification of individual data elements. But the client cannot change the tables o&#114; columns of data. Read/write is the default, so clients can still add, modify, o&#114; del&#101;te individual items.<br/>Before we talk about how to cr&#101;ate a completely read-only view of the data, let&#39;s take a brief look at how you can respond to changes in your data when you allow public clients to modify it. This is important because you&#39;ll often want to export a DataView to UI controls so that the user can edit the data (see Item 38). You&#39;ve undoubtedly already used Windows forms data binding to provide the means for your users to edit private data in your objects. The DataTable class, inside the DataSet, raises events that make it easy to implement the observer pattern: Your classes can respond to any changes that other clients of your class have made. The DataTable objects inside your DataSet will raise events when any column o&#114; row changes in that table. The ColumnChanging and RowChanging events are raised before an edit is committed to the DataTable. The ColumnChanged and RowChanged events are raised after the change is committed.<br/>You can generalize this technique anytime you want to expose internal data elements for modification by public clients, but you need to validate and respond to those changes. Your class subscribes to events generated by your internal data structure. Event handlers validate changes o&#114; respond to those changes by updating other internal state.<br/>Going back to the o&#114;iginal problem, you want to let clients view your data but not make any changes. When your data is stored in a DataSet, you can enforce that by creating a DataView for a table that does not allow any changes. The DataView class contains properties that let you customize support for add, del&#101;te, modification, o&#114; even sorting of the particular table. You can cr&#101;ate an indexer to return a customized DataView on the requested table using an indexer:<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MyBusinessObject<br/>{<br/>&nbsp;&nbsp;// Read Only property providing access to a<br/>&nbsp;&nbsp;// private data member:<br/>&nbsp;&nbsp;private DataSet _ds;<br/>&nbsp;&nbsp;public IList this[ string tableName ]<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;get<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataView view =<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ds.DefaultViewManager.Cr&#101;ateDataView<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( _ds.Tables[ tableName ] );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowNew = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowDel&#101;te = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.AllowEdit = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return view;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>}<br/>// Access the dataset:<br/>&nbsp;&nbsp;&nbsp;&nbsp;IList dv = bizOjb[ &#34;customers&#34; ];<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ( DataRowView r in dv )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine( r[ &#34;name&#34; ] );<br/>This final excerpt of the class returns the view into a particular data table through its IList interface reference. You can use the IList interface with any collection; it&#39;s not specific to the DataSet. You should not simply return the DataView object. Users could easily enable the editing and add/del&#101;te capability again. The view you are returning has been customized to disallow any modifications to the objects in the list. Returning the IList pointer keeps clients from modifying the rights they have been given to the DataView object.<br/>Exposing reference types through your public interface allows users of your object to modify its internals without going through the methods and properties you&#39;ve defined. That seems counterintuitive, which makes it a common mistake. You need to modify your class&#39;s interfaces to take into account that you are exporting references rather than values. If you simply return internal data, you&#39;ve given access to those contained members. Your clients can call any method that is available in your members. You limit that access by exposing private internal data using interfaces, o&#114; wrapper objects. When you do want your clients to modify your internal data elements, you should implement the Observer pattern so that your objects can validate changes o&#114; respond to them.</p><p> + <a href="#CommentCard">&#x67E5;&#x770B;&#x5F53;&#x524D;&#x65E5;&#x5FD7;&#x8BC4;&#x8BBA;</a> (0)</p><p>&nbsp;<br/><br/><a href="wap.asp?do=Login">&#x767B;&#x5F55;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.094&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="postCommentCard"><p><b>&#x6807;&#x9898;&#x3A;</b> <a href="#MainCard">&#x45;&#x66;&#x66;&#x65;&#x63;&#x74;&#x69;&#x76;&#x65;&#x20;&#x43;&#x23;&#x20;&#x539F;&#x5219;&#x32;&#x33;&#xFF1A;&#x907F;&#x514D;&#x8FD4;&#x56DE;&#x5185;&#x90E8;&#x7C7B;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;</a></p><p><br/>你没有权限发表评论</p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.094&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="CommentCard"><p>&#x6682;&#x65E0;&#x8BC4;&#x8BBA;</p><p><a href="#MainCard">&#x8FD4;&#x56DE;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.094&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card>
</wml>
