数据窗口的种类 -卡片类。
2009-03-18 16:30
106 查看
数据来源 :
A卡片对应一条记录,每个控件对应记录中的一个字段。B 卡片对应多条记录。每个控件对应一条记录中的某个字段。
对于第一种情况,只需要设置控件的DATABINDINGS属性就可以了.
具体代码如下 :
this.btnEdit_Y_DYKM.DataBindings.CLEAR .
this.btnEdit_Y_DYKM.DataBindings.Add("要绑定的属性", DS_CurRecodr.Tables[0].DefaultView, "对应的字段名称").
对于第二种情况 。
需要首先把行转化为列 。具体的代码 :
#region //列转化为行。 RecordingRulesDs 到 dt ,dt有切仅有一条数据。
// 创建dt 的结构;
string columName = "'GTJSYHSKPZLX','GTJSYHFKPZLX','GTJSYHSKZDFH', "
+ "'GTJSZYFJZPZLX','GTJSZYFJZHSKM','GTJSZYFJZZDFH','GTJSDQCRPZLX','GTJSDQCRZDFH','GTJSDQZQPZLX', "
+ "'GTJSDQZQZYFPZLX','GTJSDQZQDQLXHSKM','GTJSDQZQHQLXHSKM','GTJSDQZQZDFH' , 'GTJSDQZQZDPZ','GTJSDQCRZDPZ'";
columName = columName.Replace("'", "");
String[] columNameList = columName.Split(',');
dt.Rows.Clear();
dt.Columns.Clear();
foreach (string str in columNameList)
{
DataColumn dc = new DataColumn();
dc.ColumnName = str.Trim();
dt.Columns.Add(dc);
}
//dt里面添加数据。
dt.Rows.Clear();
string[] numberValues ={ " ", " ", "0", " ", " ", "0", " ", "0", " ", " ", " ", " ", "0", "1", "1" };
dt.Rows.Add(numberValues);
//更具RecordingRulesDs 修改dt里面的数据
if (RecordingRulesDs.Tables[0].Rows.Count > 0)
{
foreach (string str in columNameList)
{
DataRow[] DTR = RecordingRulesDs.Tables[0].Select(" F_JGNM = '" + this.UserInfo.JGNM.Trim() + "' AND F_VKEY = '" + str.Trim() + "'");
if (DTR.Length == 1)
{
string columValue = DTR[0]["F_VALUE"].ToString().Trim();
dt.Rows[0][str.Trim()] = columValue;
}
}
}
dtEx = dt.Copy();
dt.AcceptChanges();
dtEx.AcceptChanges();
#endregion
然后重复第一种情况 把字段和空间关联起来,就可以控制读写了。
判断卡片中的数据是否改变有两种方法。
使用两个
[b]dataset 。此种情况是比较成熟的方案
[/b]
。
使用步骤程序中定义一个全局的窗体datasest变量 。UIDS_OLD ,和 UIDS .窗体load时把UIDS填充数据。同时UIDS_OLD = UIDS.COPY() ;
需要判断界面数据是否改变时比较两个DS数据是否一致、具体代码为: ///
/// DataSet和原始的DataSet相比较,是否被修改了。
///
///
原始DataSet
///
要比较的DataSet
///
public static string IfDataSetHasChanges(DataSet dsInit, DataSet ds)
{
string vsRtn = "";
if ((ds == null) || (dsInit == null))
{
return vsRtn;
}
int countInit = dsInit.Tables.Count;
int count = ds.Tables.Count;
if (countInit != count)
{
vsRtn = "HasChanges";
return vsRtn;
}
int tblIndex = 0;
DataTable tblInit = null;
foreach (DataTable tbl in ds.Tables)
{
tblInit = dsInit.Tables[tblIndex];
vsRtn = IfDataTableHasChanges(tblInit, tbl);
if (vsRtn != "")
break;
tblIndex++;
}
return vsRtn;
}
///
/// DataSet和原始的DataSet相比较,是否被修改了。
///
///
原始DataSet
///
要比较的DataSet
///
public static bool DataSetHasChanges(DataSet dsInit, DataSet ds)
{
if (string.IsNullOrEmpty(IfDataSetHasChanges(dsInit, ds)))
return false;
else
return true;
}
///
/// 判断DataTable是否变化了,和原始的DataTable相比较
///
///
原始的DataTable
///
要比较的DataTable
///
public static string IfDataTableHasChanges(DataTable tblInit, DataTable tbl)
{
string vsRtn = "";
if (((tbl == null) && (tblInit != null)) || ((tbl != null) && (tblInit == null)))
{
vsRtn = "HasChanges";
return vsRtn;
}
int colCount = tblInit.Columns.Count;
int Count = tbl.Columns.Count;
if (colCount != Count)//判断了是否相同
{
vsRtn = "HasChanges";
return vsRtn;
}
int rowCount = tblInit.Rows.Count;//判断行是否相同
Count = tbl.Rows.Count;
if (rowCount != Count)
{
vsRtn = "HasChanges";
return vsRtn;
}
int rowIndex = 0;
DataRow rowInit = null;
foreach (DataRow row in tbl.Rows)
{
rowInit = tblInit.Rows[rowIndex];
if (row.RowState == DataRowState.Deleted)
{
vsRtn = "HasChanges";
break;
}
if (vsRtn != "")
break;
for (int colIndex = 0; colIndex < colCount; colIndex++)
{
if (tblInit.Columns[colIndex].DataType.Name.ToUpper() == "DOUBLE" || tblInit.Columns[colIndex].DataType.Name.ToUpper() == "FLOAT" || tblInit.Columns[colIndex].DataType.Name.ToUpper() == "DECIMAL")
{
if (string.IsNullOrEmpty(Convert.ToString(rowInit[colIndex])) || string.IsNullOrEmpty(Convert.ToString(row[colIndex])))
{
if (Convert.ToString(rowInit[colIndex]) != Convert.ToString(row[colIndex]))
{
vsRtn = "HasChanges";
break;
}
}
else
{
if (Math.Round(Convert.ToDouble(rowInit[colIndex]), 5) != Math.Round(Convert.ToDouble(row[colIndex]), 5))
{
vsRtn = "HasChanges";
break;
}
}
}
else
if (Convert.ToString(rowInit[colIndex]) != Convert.ToString(row[colIndex]))
{
vsRtn = "HasChanges";
break;
}
}
rowIndex++;
}
return vsRtn;
}
更具需要把决定下一步操作。
使用一个dataset 。
利用dataset自己的属性控制数据是否改变以及对数据如何处理。备注 :
1) 使用form展现dataset数据是通过databindings 属性来实现的,但是如果操作过程中重复获取数据,那么就有可能导致form和dataset之间的关联丧失。界面数据展现的就是dataset当前行的记录。针对此种情况的处理方式 :UIDS.TABLE[0].ROWS.CLEAR ;
UIDS.TABLE[0].ROWS.ADD(UIDS_NEW.TABLE[0].ROWS) ;
如果直接用UIDS获取数据。
UIDS = getdata() ;
相关文章推荐
- 数据窗口的种类 –类表类
- 子窗口向父窗口传数据
- jquery Jbox 插件实现弹出窗口在修改的数据之后,关闭弹出窗口刷新父页面的问题
- PB中数据窗口导出数据到EXCEL的程序(3)
- vb6.0 连接access数据库 并在窗口显示数据内容
- 如何编写一个能读取Powerbuilder的数据窗口中数据的程序
- iphone 使用委托(delegate)在不同的窗口之间传递数据(转)
- PB数据窗口控件-datawindow
- 点击添加按钮关闭窗口,再点击修改按钮,提交后携带的是添加的数据
- PB如何创建动态数据窗口
- 点击按钮弹出新窗口,输入数据后返回并刷新页面
- winform程序两个窗体间同步数据(三):建立父窗口与子窗口的父子关系(不使用线程)
- PB数据窗口datawindow的查询条件设置和执行
- 数据结构实验之查找三:树的种类统计
- 60个数据窗口技巧
- 在PB的数据窗口中怎样实现某一列的增量查询功能
- 关于数据窗口的不同打印机打印和compute取值问题
- web页面上 菜单弹出窗口 动态获取 数据
- [ASP.NET]如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(C#代码)
- Qt窗口间通过信号槽传递数据