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

数据来源 :

A卡片对应一条记录,每个控件对应记录中的一个字段。

B 卡片对应多条记录。每个控件对应一条记录中的某个字段。

对于第一种情况,只需要设置控件的DATABINDINGS属性就可以了.

具体代码如下 :

this.btnEdit_Y_DYKM.DataBindings.CLEAR .

this.btnEdit_Y_DYKM.DataBindings.Add("要绑定的属性", DS_CurRecodr.Tables[0].DefaultView, "对应的字段名称").

对于第二种情况

  1. 需要首先把行转化为列 。具体的代码 :
  2. #region //列转化为行。 RecordingRulesDs 到 dt ,dt有切仅有一条数据。
  3. // 创建dt 的结构;
  4. string columName = "'GTJSYHSKPZLX','GTJSYHFKPZLX','GTJSYHSKZDFH', "
  5. + "'GTJSZYFJZPZLX','GTJSZYFJZHSKM','GTJSZYFJZZDFH','GTJSDQCRPZLX','GTJSDQCRZDFH','GTJSDQZQPZLX', "
  6. + "'GTJSDQZQZYFPZLX','GTJSDQZQDQLXHSKM','GTJSDQZQHQLXHSKM','GTJSDQZQZDFH' , 'GTJSDQZQZDPZ','GTJSDQCRZDPZ'";
  7. columName = columName.Replace("'", "");
  8. String[] columNameList = columName.Split(',');
  9. dt.Rows.Clear();
  10. dt.Columns.Clear();
  11. foreach (string str in columNameList)
  12. {
  13. DataColumn dc = new DataColumn();
  14. dc.ColumnName = str.Trim();
  15. dt.Columns.Add(dc);
  16. }
  17. //dt里面添加数据。
  18. dt.Rows.Clear();
  19. string[] numberValues ={ " ", " ", "0", " ", " ", "0", " ", "0", " ", " ", " ", " ", "0", "1", "1" };
  20. dt.Rows.Add(numberValues);
  21. //更具RecordingRulesDs 修改dt里面的数据
  22. if (RecordingRulesDs.Tables[0].Rows.Count > 0)
  23. {
  24. foreach (string str in columNameList)
  25. {
  26. DataRow[] DTR = RecordingRulesDs.Tables[0].Select(" F_JGNM = '" + this.UserInfo.JGNM.Trim() + "' AND F_VKEY = '" + str.Trim() + "'");
  27. if (DTR.Length == 1)
  28. {
  29. string columValue = DTR[0]["F_VALUE"].ToString().Trim();
  30. dt.Rows[0][str.Trim()] = columValue;
  31. }
  32. }
  33. }
  34. dtEx = dt.Copy();
  35. dt.AcceptChanges();
  36. dtEx.AcceptChanges();
  37. #endregion

    然后重复第一种情况 把字段和空间关联起来,就可以控制读写了。

     

判断卡片中的数据是否改变有两种方法

 

使用两个

dataset 。此种情况是比较成熟的方案

  1. 使用步骤程序中定义一个全局的窗体datasest变量 。UIDS_OLD ,和 UIDS .
  2. 窗体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;

}

 

  1. 更具需要把决定下一步操作。

使用一个dataset 。

利用dataset自己的属性控制数据是否改变以及对数据如何处理。

备注 :

1) 使用form展现dataset数据是通过databindings 属性来实现的,但是如果操作过程中重复获取数据,那么就有可能导致form和dataset之间的关联丧失。界面数据展现的就是dataset当前行的记录。针对此种情况的处理方式 :

  1. UIDS.TABLE[0].ROWS.CLEAR ;

UIDS.TABLE[0].ROWS.ADD(UIDS_NEW.TABLE[0].ROWS) ;

  1. 如果直接用UIDS获取数据。

    UIDS = getdata() ;

posted @ 2009-03-18 16:30  sdgxboy  阅读(175)  评论(0编辑  收藏  举报