窗體從加載數據庫中加載數據
確認時如何判斷窗體數據有無被修改?有日期類型,數字類型
我現在的方法是利用SELECT COUNT(*) FROM TABLE WHERE........
再去數據庫種查一次判斷
但這樣很不好,日期類型,數字類型 不知道WHERE條件是寫 = 還是 IS
因為日期類型,數字類型有可能是NULL
我覺得不應該利用數據庫來判斷
有更好的方法嗎?
確認時如何判斷窗體數據有無被修改?有日期類型,數字類型
我現在的方法是利用SELECT COUNT(*) FROM TABLE WHERE........
再去數據庫種查一次判斷
但這樣很不好,日期類型,數字類型 不知道WHERE條件是寫 = 還是 IS
因為日期類型,數字類型有可能是NULL
我覺得不應該利用數據庫來判斷
有更好的方法嗎?
關鍵是我要再UPDATE 之前判斷一下
TextBox(文字和數字),MaskTextBox(日期)
直接在窗體界面上修改啊呀!
否则就不做动作。不知道这个做法怎么样?
否则就不做动作。 我同意这种方法
把你这个窗体上显示的页面锁住。
设置一个默认值,就不存在null的问题了,
想问题别想的太复杂了.
至于怎么判断是否输入了字符,那就是你自己要做的了,比如在word里,你增加了文字,然后又删除了文字,即便和初始状态是一样的,也是发生了变化的。总之,你别指望有什么通用的现成的办法我倒认为你认为是笨办法的方法最可行,对于修改动作而言,表单域事先保存在xml或json对象中,然后把数据填充在表单中(这个是js自动完成的),在保存之前,用表单里的每一个表单域与xml或json对象中的每一项进行比对(当然这个也是js自动来完成),那么不管你有30个也好100个也好的字段,都是经过循环来实现的,我说的这个是基于web的方案,当然,字段名要统一才行。那么对于winform而言,记录集中一条记录的每个字段也是可以遍历的,表单中的对象也是可以遍历的,不用你写30个if else ,明白了么 ?
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是数据集中的表
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("改过了");
}
}
}
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("改过了");
}
}
}
或者在加载的时候让其有个属性
就是attributs.add("onchange","hidchanged=true;")界面上加<scirpt>var hidchanged = false;</script>最后再获取hidchanged的值是不是为false;不过这么做的限制是需要调用JS里的变量当然,如果是用的gridview是可以判断其datatable的datarow的状态是否为updated
肯定要用到递归,因为控件之间有包含关系!
比如DIV PANLE等