窗體從加載數據庫中加載數據
確認時如何判斷窗體數據有無被修改?有日期類型,數字類型
我現在的方法是利用SELECT COUNT(*) FROM TABLE WHERE........
再去數據庫種查一次判斷
但這樣很不好,日期類型,數字類型 不知道WHERE條件是寫 = 還是 IS
因為日期類型,數字類型有可能是NULL
我覺得不應該利用數據庫來判斷
有更好的方法嗎?

解决方案 »

  1.   

    那就看这些修改操作是在类内的什么方法里面了可以加一个 bool型的参数代码的修改方法内加对这个参数的赋值最后检测这个参数的值就可以了。
      

  2.   

    修改沒什麼操作啊,直接數據庫UPDATE操作
    關鍵是我要再UPDATE 之前判斷一下
      

  3.   


    TextBox(文字和數字),MaskTextBox(日期)
    直接在窗體界面上修改啊呀!
      

  4.   

    给一个按钮“修改”,用户点击方可修改,而后直接update。
    否则就不做动作。不知道这个做法怎么样?
      

  5.   

    如果是WEB页面,可以用隐藏域在画面加载的时候先把画面初始化的内容存进去,然后保存的时候做一个比对.
      

  6.   

    给一个按钮“修改”,用户点击方可修改,而后直接update。 
    否则就不做动作。 我同意这种方法
      

  7.   

     这位老兄,我觉得这是一个记录加锁的问题。你可以SELECT * FROM TABLENAME WHERE .... FOR UPDATE.
    把你这个窗体上显示的页面锁住。
      

  8.   

    如果是oracle  可以在日期和number类型加上nvl(column_number,0),就是如果为空,
    设置一个默认值,就不存在null的问题了,
    想问题别想的太复杂了.
      

  9.   

    那么楼主只好自己实现以下功能对于一个文本框而言,如果在这个文本框中发生了输入字符的动作,那么把全局变量changed修改为true
      至于怎么判断是否输入了字符,那就是你自己要做的了,比如在word里,你增加了文字,然后又删除了文字,即便和初始状态是一样的,也是发生了变化的。总之,你别指望有什么通用的现成的办法我倒认为你认为是笨办法的方法最可行,对于修改动作而言,表单域事先保存在xml或json对象中,然后把数据填充在表单中(这个是js自动完成的),在保存之前,用表单里的每一个表单域与xml或json对象中的每一项进行比对(当然这个也是js自动来完成),那么不管你有30个也好100个也好的字段,都是经过循环来实现的,我说的这个是基于web的方案,当然,字段名要统一才行。那么对于winform而言,记录集中一条记录的每个字段也是可以遍历的,表单中的对象也是可以遍历的,不用你写30个if else ,明白了么 ?
      

  10.   

     //验证数据有无改动
            public bool HasDataChanged(DataTable dataTable)
            {
                try
                {
                    DataTable changedTable = dataTable.GetChanges();
                    return changedTable != null ? true : false;
                }
                catch(Exception e)
                {
                    MessageBox.Show("错误:" + e.Message, sCaption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
    //假设你的控件与数据库已经绑定,那么在调用上面函数前先执行BindingSouce.EndEdit();
    //BindingSouce是数据绑定控件,dataTable是数据集中的表
      

  11.   


    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;namespace WindowsFormsApplication7
    {
        public partial class Form1 : Form
        {
            bool Modified = false;        public Form1()
            {
                InitializeComponent();
                AddEvent(this.Controls);        }        void AddEvent(Control.ControlCollection CC)
            {
                foreach (Control Child in CC)
                {
                    Child.TextChanged += OnTextChanged; 
                    AddEvent(Child.Controls);
                }
            }        void OnTextChanged(object sender, EventArgs e)
            {
                Modified = true;
                MessageBox.Show("改过了");
            }
        }
    }
      

  12.   


    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;namespace WindowsFormsApplication7
    {
        public partial class Form1 : Form
        {
            bool Modified = false;        public Form1()
            {
                InitializeComponent();
                AddEvent(this.Controls);        }        void AddEvent(Control.ControlCollection CC)
            {
                foreach (Control Child in CC)
                {
                    Child.TextChanged += OnTextChanged; 
                    AddEvent(Child.Controls);
                }
            }        void OnTextChanged(object sender, EventArgs e)
            {
                Modified = true;
                MessageBox.Show("改过了");
            }
        }
    }
      

  13.   

    使用自定义控件
    或者在加载的时候让其有个属性
    就是attributs.add("onchange","hidchanged=true;")界面上加<scirpt>var hidchanged = false;</script>最后再获取hidchanged的值是不是为false;不过这么做的限制是需要调用JS里的变量当然,如果是用的gridview是可以判断其datatable的datarow的状态是否为updated
      

  14.   

    如果一定要用结果来比对的话那就只能用foreach来遍历界面上的所有控件了注意写个方法来做这个事
    肯定要用到递归,因为控件之间有包含关系!
    比如DIV PANLE等
      

  15.   

    但这个只能检测textbox啊,combobox和checkbox怎么办?