您的位置:首页 > 其它

数据窗口的种类 -卡片类。

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() ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: