如何開發動態表格編輯功能

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.