欢迎加我的QQ群:193522571,一起来讨论、交流!

dgvHelper,xmlHelper,inputbox(仿vba),Evaluate(vba中函数应用于C#)

1.在dgv中进行增加、删除、修改行时应针对dt进行操作,然后刷新xml

2.datagridview中的currentrow未必就是当前选中行

3.inputbox类

string sDescription = InputBox.ShowInputBox("请输入表达式的说明!");
    public class InputBox : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox tbData;
        private System.Windows.Forms.Button btnOK;
        private System.Windows.Forms.Button btnCancel;
        private System.Windows.Forms.ToolTip ttpShow;
        private System.ComponentModel.Container components = null;
        private InputBox()
        {
            InitializeComponent();
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }

            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.label1 = new System.Windows.Forms.Label();
            this.tbData = new System.Windows.Forms.TextBox();
            this.btnOK = new System.Windows.Forms.Button();
            this.btnCancel = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(13, 13);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(65, 12);
            this.label1.TabIndex = 0;
            this.label1.Text = "在此输入:";
            // 
            // tbData
            // 
            this.tbData.Location = new System.Drawing.Point(84, 10);
            this.tbData.Name = "tbData";
            this.tbData.Size = new System.Drawing.Size(471, 21);
            this.tbData.TabIndex = 1;
            // 
            // btnOK
            // 
            this.btnOK.Location = new System.Drawing.Point(146, 40);
            this.btnOK.Name = "btnOK";
            this.btnOK.Size = new System.Drawing.Size(75, 23);
            this.btnOK.TabIndex = 2;
            this.btnOK.Text = "确定";
            this.btnOK.UseVisualStyleBackColor = true;
            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
            // 
            // btnCancel
            // 
            this.btnCancel.Location = new System.Drawing.Point(373, 40);
            this.btnCancel.Name = "btnCancel";
            this.btnCancel.Size = new System.Drawing.Size(75, 23);
            this.btnCancel.TabIndex = 2;
            this.btnCancel.Text = "取消";
            this.btnCancel.UseVisualStyleBackColor = true;
            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
            // 
            // InputBox
            // 

            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.ClientSize = new System.Drawing.Size(567, 75);
            this.ControlBox = false;
            this.Controls.Add(this.btnCancel);
            this.Controls.Add(this.btnOK);
            this.Controls.Add(this.tbData);
            this.Controls.Add(this.label1);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.Name = "InputBox";
            this.Text = "InputBox";
            this.ResumeLayout(false);
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        /// <summary>
        /// 显示输入框
        /// </summary>
        /// <param name="sHeadText"></param>
        /// <param name="sHistoryText"></param>
        /// <returns></returns>
        public static string ShowInputBox(string sHeadText, string sHistoryText="")
        {
            InputBox inputbox = new InputBox();
            inputbox.StartPosition = FormStartPosition.CenterParent;
            inputbox.Text = sHeadText;
            if (sHistoryText!="")
            {
                inputbox.tbData.Text = sHistoryText;
            }
            inputbox.ShowDialog();
            return inputbox.tbData.Text;
        }
    }

 

4.按excel vba中的公式evaluate计算

    /// <summary>
    /// 利用Excel中VBA的Evaluate方法对字符串进行计算
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static double Cal(this string str)
    {
      var app = new Excel.Application();
      Excel.Workbook workbook = app.Workbooks.Add();
      Excel.Worksheet worksheet = workbook.Worksheets.Add() as Excel.Worksheet;
      var result = worksheet.Evaluate(str);
      app.DisplayAlerts = false;
      app.Quit();
      double data = double.Parse(result.ToString());
      return data;
    }

5.上项中错误返回的意义

      //-2146826281 =#DIV / 0!
      //-2146826246 - #N / A
      //- 2146826259 =#NAME?
      //-2146826288 =#NULL!
      //-2146826252 =#NUM!
      //-2146826265 =#REF! < -你的!
      //-2146826273 = VALUE!

posted @ 2017-10-19 11:00  swtool  阅读(224)  评论(0编辑  收藏  举报
欢迎加我的QQ群:193522571,一起来讨论、交流!