这题做的这样爱你对不对对

posts - 32,&
comments - 128,&
trackbacks - 11
今天我遇到一个题目,是关于AcceptChanges()和RejectChanges()方法的,考虑到可能很多人不清楚这些概念。所以拿出来讲讲。由这个问题我们也深入了解一下这两个方法。为了不在显示略文时显示出代码来,我就在刚开始多打一点字了。呵。。。题目的代码如下:
&1private&void&button1_Click(object&sender,&System.EventArgs&e)&2&&&&&&&&{&3&&&&&&&&&&&&DataSet&ds=&new&DataSet();&4&5&&&&&&&&&&&&DataTable&tb&=&ds.Tables.Add("Items");&6&&&&&&&&&&&&DataColumn&pk&=&tb.Columns.Add("ID",&typeof(Int32));&7&&&&&&&&&&&&tb.Columns.Add("Items",&typeof(string));&8&&&&&&&&&&&&tb.PrimaryKey&=&new&DataColumn[]&{pk};&9<span style="COLOR: #&&&&&&&&&&&&for(int&i=<span style="COLOR: #;i&<span style="COLOR: #;i++)<span style="COLOR: #&&&&&&&&&&&&{<span style="COLOR: #&&&&&&&&&&&&&&&&DataRow&dr&=&tb.NewRow();<span style="COLOR: #&&&&&&&&&&&&&&&&dr[<span style="COLOR: #]&=&i.ToString();<span style="COLOR: #&&&&&&&&&&&&&&&&dr[<span style="COLOR: #]&=&"Itme&"+i;<span style="COLOR: #&&&&&&&&&&&&&&&&tb.Rows.Add(dr);<span style="COLOR: #&&&&&&&&&&&&}<span style="COLOR: #<span style="COLOR: #&&&&&&&&&&&&tb.AcceptChanges();<span style="COLOR: #&&&&&&&&&&&&tb.Rows[<span style="COLOR: #].Delete();<span style="COLOR: #&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);<span style="COLOR: #&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);<span style="COLOR: #&&&&&&&&&&&&tb.RejectChanges();<span style="COLOR: #<span style="COLOR: #&&&&&&&&&&&&dataGrid1.DataSource&=&<span style="COLOR: #&&&&&&&&}
我们看到在第3-16行,实际上我们是生成了一个DataTable,这个dt有两个字段,分别是ID和Items,然后通过添加6条记录。如果到此为止,那么这个的内容应该是如下:
不过我们在第19,20,21行中分别删除了第0行,然后是移除第1行,移除第2行。当然如果只是这样就算不上题目了,我们在18和22行用到了DataTable的AcceptChanges()方法和RejectChanages()方法。首先大家先想一下答案是什么?随便我把MSDN上对这两个方法的解释粘一下,好让大家理解。DataTable.AcceptChanges方法提交自上次调用 AcceptChanges 以来对该表进行的所有更改。调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象将成功结束其编辑。DataRowState 也会随之更改:所有状态为 Added 和 Modified 的行的状态都变为 Unchanged;状态为 Deleted 的行则被移除。在您尝试使用 DbDataAdapter.Update 方法更新 DataSet 之后,通常会对 DataTable 调用 AcceptChanges 方法。DataTable.RejectChanges方法回滚自该表加载以来或上次调用 AcceptChanges 以来对该表进行的所有更改。调用 RejectChanges 时,任何仍处于编辑模式的 DataRow 对象将取消其编辑。新行被移除。DataRowState 设置为 Modified 或 Deleted 的行返回到其初始状态。一个意思表示立即更新,一个表示在接受上次调用AcceptChanges后进行回滚。
好的,那么是不是说,我们这儿的3条记录都能够回滚回来呢?
我们先公布一下答案吧,看看和大家想的是不是一样的。
OK,答案表明并不是所有的记录都被回滚回来了,似乎只有0被回滚了。这并不是奇怪,那是因为我们使用删除行的方法不一样,一个是Delete(),一个是RemoveAt(int)。我们通过在MSDN中的查询了解到在使用 Delete 方法后,RowState 变成&#8220;已删除&#8221;。在您调用 AcceptChanges 之前,它一直保持&#8220;已删除&#8221;。可通过调用 RejectChanges 取消删除行。
而RemoveAt表示当移除行时,该行中的所有数据都将丢失。您还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 RemoveAt 等同于先调用 Delete 再调用 AcceptChanges。那就是说,我们使用Delete()方法删除行后是可以回滚的,而使用RemoveAt(int)方法是不能回滚的。所以刚刚前面我们删除的三行,只回滚了0的那行是完成正确的。我想大家对答案应该没有疑问了。从这个题目中,我引申出几个题目来,看看大家会不会做哦?下面接着,我们再来修改一下代码看看。
tb.Rows[<span style="COLOR: #].Delete();tb.AcceptChanges();tb.Rows.RemoveAt(<span style="COLOR: #);tb.Rows.RemoveAt(<span style="COLOR: #);tb.RejectChanges();
我们把AcceptChanges()方法放到后Delete()后面,很明显这样做,会让ID为0的数据也无法回滚。为什么大家看我上面粘的MSDN解释就知道了。那么就这的话,答案会是什么呢,会不会有人想到是2,4,5呢。想到2,4,5的人就错了哦。因为当接受AcceptChanges()方法后,前面的0行就彻底删除了,这时数据应该是1,2,3,4,5,然后RemoveAt(1)表示删除第2行,删除后也是立刻删除的,无法回滚,所以这时数据应该是1,3,4,5,接着RemoveAt(2)删除第3行,所以答案应该是1,3,5。而原来把AcceptChanage()方法放在Delete()前面时,当调用tb.Rows[0].Delete()时,只是标记状态为删除,并没有直接移除第0行,所以那个RemoveAt(1),还是从0,1,2,3,4,5中删除第2行,所以答案是0,2,4,5。好,我们再修改一下代码:
tb.AcceptChanges();tb.Rows[<span style="COLOR: #].Delete();&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);tb.AcceptChanges();tb.Rows.RemoveAt(<span style="COLOR: #);tb.RejectChanges();
大家来猜猜答案是什么呢?不知道有没有人想到会是2,4,5,实际上不对。正确的答案应该是2,3,5。首先的第一个AcceptChanages表示将无法回滚前面添加数据的操作。接着第二个AcceptChanages表示彻底删除Delete()所删除的数据,这个时候数据就只剩下2,3,4,5了,然后再RemoveAt(2)把第三行删除了,所以就剩下2,3,5了。好的,我们再把第一个AcceptChanages()方法给删除了,大家想想答案会是什么呢,代码如下:
tb.Rows[<span style="COLOR: #].Delete();&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);tb.AcceptChanges();tb.Rows.RemoveAt(<span style="COLOR: #);tb.RejectChanges();
可能有人说了,AcceptChanages()方法是对前面的语句生效的,所以你把这个删除了一点问题也没有,答案当然还是2,3,5了,其实这种说法是错误的。这段代码的正确答案是1,3,5。为什么会是这样呢,那是因为当Delete()方法在前面没有接收到AcceptChaages()方法后,会彻底删除因为没有必要回滚。所以RemoveAt(1)在执行时,实际上数据是1,2,3,4,5,它删除第2行,也就是3。好的,我们再看看下面的这段代码:
tb.Rows[<span style="COLOR: #].Delete();&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);tb.Rows.RemoveAt(<span style="COLOR: #);tb.AcceptChanges();tb.RejectChanges();
不知道有没有人会笑话我,实际上这段代码和上面的代码是一个效果哦。那么我们再看看这段代码呢?
tb.Rows[<span style="COLOR: #].Delete();&&&&&&&&&&&&tb.Rows.RemoveAt(<span style="COLOR: #);tb.Rows.RemoveAt(<span style="COLOR: #);tb.RejectChanges();
我们把所有的AcceptChanges()方法都给去掉了,那么只剩下RejectChanages()方法了,会是什么样的结果呢?结果返回空记录了,为什么呢????其实在前面最早是无已经给出定义了,不知道的同学是太粗心了哦。自己去看哦。
阅读(...) 评论()为什么英文文章全都看懂了,可是题目就是做不对呢?_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
为什么英文文章全都看懂了,可是题目就是做不对呢?
北京新祥旭教育信息咨询中心是北京知名的考...|
总评分0.0|
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢这道题做得对不对,是谁做了?【垣曲吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:131,847贴子:
这道题做得对不对,是谁做了?收藏
看不出来有什么不对
12乘以8,在用480除可能就对了。
算对就得了管那种算法
严格意义上讲
这个孩子的做法前面缺了个单位换算1年=12个月
然后再写上孩子的答案
那这道题就对了
单位换算是三四年级重点
小孩错了。应该先用12*8=96480/96=5
这个应该先把条件写下来,12从哪来的?一年等于十二个月要注明,别说这是常识,有时候你还要证明你是你自己,不信问老师, 他也会这么说,不可能凭空出来一个12,就像让低年级做一块钱买两个鸡蛋,一个鸡蛋多少钱,他们没学过小数点,不得把一块换算成10角么
怎么可能对呢
太直接了,因为要计算的步骤,考的是思路,结果对了,思路没表示出来,也会判你错
登录百度帐号推荐应用你一定会做这道题 上面这句话的描述是正确还是错误的?为什么?_百度知道
你一定会做这道题 上面这句话的描述是正确还是错误的?为什么?
我有更好的答案
所以能知道 a命题的正确性与P一致。所以 假设 当P命题为假时,a为真且b为假,与之前所得相反。所以假设不成立当P为真命题时,a 也是真 且b也是真改成命题P:如果这是一道题,那么你会做。有命题a:这是一道题, 命题a说 P是一道题。 b:你会做所以P = a -& b
采纳率:48%
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 我这样爱你到底对不对 的文章

 

随机推荐