1.界面上要有一个绑定控件,如GridView,或Repeater
2.从记录集中绑定数据,有记录集的参数,参数可以为null,如果是null,则从数据库中取数据集。绑定时注意绑定每一个字段的赋值。
/// <summary>
/// 绑定大题
/// </summary>
/// <param name="dataView">绑定的数据,如果是null则去数据库中取</param>
private void BindNode(DataView dataView)
{
if (dataView == null)
{
SearchCondition filter = new SearchCondition();
filter.And(NodeField.UidT, hidUid.Value);
dataView = NodeTable.SelectByFilter(filter, NodeField.ListOrderT).DefaultView;
}
gvNode.DataSource = dataView;
gvNode.DataBind();
}
3. 当只是编辑内容时,不需作任何处理,因为绑定控件会保存状态。
4. 要开发一个函数,将可以从界面上取出数据生成记录集,从而得到编辑过的数据。注意创建记录对象时要用该ID从数据库中查找出来生成,则修改。
private DataTable GetInputtedNodeList()
{
SearchCondition filter = new SearchCondition();
filter.And(NodeField.NodeUidT, "norecord");
DataTable dtNode = NodeTable.SelectByFilter(filter);
DataRow dataRow;
for (int i = 0; i < gvNode.Rows.Count; i++)
{
HtmlInputHidden hidNodeUid = (HtmlInputHidden)gvNode.Rows[i].FindControl("hidNodeUid");
if (hidNodeUid == null) continue;
string NodeUid = hidNodeUid.Value;
filter = new SearchCondition();
filter.And(NodeField.NodeUidT, NodeUid);
DataTable dataTable = NodeTable.SelectByFilter(filter);
if (dataTable.Rows.Count == 0)
{
dataTable.Rows.Add(dataTable.NewRow());
dataTable.Rows[0][NodeField.NodeUid] = NodeUid;
}
HtmlInputHidden hidTypeUid = (HtmlInputHidden)gvNode.Rows[i].FindControl("hidTypeUid");
if (hidTypeUid.Value != null) dataTable.Rows[0][NodeField.TypeUid] = hidTypeUid.Value;
HtmlInputText txtNodeName = (HtmlInputText)gvNode.Rows[i].FindControl("txtNodeName");
if (txtNodeName != null) dataTable.Rows[0][NodeField.NodeName] = txtNodeName.Value;
HtmlInputText txtScore = (HtmlInputText)gvNode.Rows[i].FindControl("txtScore");
if (txtScore != null) dataTable.Rows[0][NodeField.Score] = ConvertUtil.ToDecimal(txtScore.Value, 0);
dataTable.Rows[0][NodeField.ListOrder] = i;
dataRow = dtNode.NewRow();
dataRow.ItemArray = dataTable.Rows[0].ItemArray;
dtNode.Rows.Add(dataRow);
}
return dtNode;
}
4. 当删除时,要取出界面上的记录集,然后把要删除的那一行删除,并把删除的ID保存起来,然后重新绑定。
private void DeleteNode()
{
string NodeUid=hidCommandPara.Value;
DataTable dtNode = GetInputtedNodeList();
for (int i = 0; i < dtNode.Rows.Count; i++)
{
if (dtNode.Rows[i][NodeField.NodeUid].ToString() == NodeUid)
{
dtNode.Rows.RemoveAt(i);
hidDeletedNodeUids.Value = hidDeletedNodeUids.Value +NodeUid+ ",";
break;
}
}
BindNode(dtNode.DefaultView);
}
5.当增加一行时,要取出界面上的记录集,加上一行空行,然后重新绑定。
private void AddNode()
{
string TypeUid = hidCommandPara.Value;
DataTable dtNode = GetInputtedNodeList();
DataRow dataRow = dtNode.NewRow();
dataRow[NodeField.NodeUid] = Guid.NewGuid().ToString();
dataRow[NodeField.TypeUid] = TypeUid;
dataRow[NodeField.Uid] = hidUid.Value;
dataRow[NodeField.NodeName] = TypeTable.GetTypeName(TypeUid);
dataRow[NodeField.Score] = 0;
dataRow[NodeField.TotalScore] = 0;
dataRow[NodeField.Num] = 0;
dtNode.Rows.Add(dataRow);
BindNode(dtNode.DefaultView);
}
6.当保存时,则一条一条保存,如果是ID已存在库中的则修改,不在库中的则增加,然后要把原来删掉的ID一一删除。注意不要再一一赋值,GetInputtedNodeList();中已实现了赋值。
private void SaveNode()
{
DataTable dataTable = GetInputtedNodeList();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
bool isAddNew = false;
decimal oldScore = 0;
string NodeUid = dataTable.Rows[i][NodeField.NodeUid].ToString();
NodeRow NodeRow = NodeTable.CreateRowBy(NodeUid);
if (NodeRow == null)
{
isAddNew = true;
}
NodeRow.AssignByDataRow(dataTable.Rows[i]);
if (isAddNew == true)
NodeRow.Insert();
else
{
NodeRow.Update();
if (oldScore != NodeRow.Score && NodeRow.Score!=0)
{
NodeTable.UpateScoreByNodeUid(NodeRow.Uid,NodeRow.NodeUid, NodeRow.Score);
}
}
}
//删掉已删除的行
string[] arrDeletedNodeUid = hidDeletedNodeUids.Value.Split(',');
for (int i = 0; i < arrDeletedNodeUid.Length; i++)
{
if(arrDeletedNodeUid[i]!="") NodeTable.DeleteNode(arrDeletedNodeUid[i]);
}
hidDeletedNodeUids.Value = "";
}