DataTable.Clear()和DataTable.Rows.Clear()引发的问题

chaojinn 2005-12-30 08:54:04
最近由于项目需要,从ListView继承了一个自定义的控件类,打算用DataTable与之邦定,做成MVC模式.
ListView是View,DataTable是Model.
可是写起来才发现DataTable.Clear()和DataTable.Rows.Clear()的时候居然就不会触发DataTable.RowChanged,RowChanging,RowDeleting,RowDeleted事件,任何事件都不触发,所以就没可能拿DataTable作Model了,因为没有办法在DataTable.Clear()和DataTable.Rows.Clear()的时候通知View去做更新了,天啊,不知道微软那帮子为C#写组件的家伙在想什么。DataTable既然都已经设计了DataTable.RowChanged,RowChanging,RowDeleting,RowDeleted事件,难道DataTable.Clear()和DataTable.Rows.Clear()了,DataTable的Row状态没有发生变化吗?简直不可理喻。
只好到这边向各位高人请教,有啥办法可以捕捉DataTable.Clear()和DataTable.Rows.Clear()函数的调用,从而去更新我的View。
先行谢过:)
...全文
518 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lidong6 2005-12-31
  • 打赏
  • 举报
回复
你可以换个思路解决此问题,如果你非要在Clear方法执行时有事件,那你只有重写Clear()方法了.
saucer 2005-12-31
  • 打赏
  • 举报
回复
那就别用DataTable,自己写自定义集合,主要的是IBindingList和IEditableObject,参考

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnadvnet/html/vbnet02252003.asp

http://msdn.microsoft.com/msdnmag/issues/05/08/CollectionsandDataBinding/default.aspx
MyLf 2005-12-31
  • 打赏
  • 举报
回复
"不能阻止用户去调用DataTable.Clear();"??
程序不是你自己写的吗?用户怎么可能去调用DataTable.Clear()?

MVC不熟悉,JAVA这一套也可以用在C#?
真相重于对错 2005-12-31
  • 打赏
  • 举报
回复
既然微软这样作了,你只有通过别的方式想办法了例如
你可以做个继承与datatable的类
重写他的clear()函数,让他触发事件,
chaojinn 2005-12-31
  • 打赏
  • 举报
回复
但是我这样仍旧不能阻止用户去调用DataTable.Clear();
因为这是一个MODEL-VIEW结构,DataTable是MODEL。用户可定可以拿到DataTable对象并对之操作,一旦他调用了DataTable.Clear(),还是照样死翘翘。
thinkingforever 2005-12-30
  • 打赏
  • 举报
回复
DataTable.Clear()是把DataTable的Row全部仍掉,不进行数据更新了,当然行的状态对它来说没有意义。
可以把DataTable.Clear()封装,通过一个方法去执行比如
void tableclear(DataTable tb)
{
tb.Clear();
//接着你的操作
}
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace 图书管理系统 { public partial class 登录窗口 : Form { //public static string ConnectionString = "Server=(local);database=图书管理库;uid=sa;pwd=1234"; //sql server 混合模式 // public static string ConnectionString = "Server=(local);Integrated Security=SSPI;database=图书管理库"; //windows模式 public string strSQL; public SqlConnection myConnection; public SqlCommandBuilder sqlCmdBld; public DataSet ds = new DataSet(); public SqlDataAdapter da; public int num=0; private DataTable myTable; private DataRow myRow; public static string strUser; public static string strPassword; // public static string strDepartment; public static bool login_flag = false; public 登录窗口() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Close(); } private void 登录窗口_Load(object sender, EventArgs e) { linkdatabase link = new linkdatabase(); //实例化 myConnection = new SqlConnection(link.connectionstring()); //实例化连接 strSQL = "select * from 用户表 "; da = new SqlDataAdapter(strSQL, myConnection); ds.Clear(); da.Fill(ds, "用户表"); //////动作 myTable = ds.Tables["用户表"]; for (int i = 0; i < myTable.Rows.Count; i++) { comboBox1.Items.Add(myTable.Rows[i]["用户名"].ToString().Trim()); } } private void button1_Click(object sender, EventArgs e) { linkdatabase link = new linkdatabase(); //实例化 myConnection = new SqlConnection(link.connectionstring()); //实例化连接 strSQL = "sele

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧