如何开发动态表格编辑功能

 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 = "";
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值