コード例 #1
0
        /// <summary>
        /// /////////////////////////////////////////////////////////////////////////////////////
        /// I added this method with the intent it be used for when cell change messages are
        /// received from the server
        /// /////////////////////////////////////////////////////////////////////////////////////
        /// </summary>
        /// <param name="col"></param>
        /// <param name="row"></param>
        /// <param name="contents"></param>
        private void ChangeCellContents()
        {
            this.Invoke((MethodInvoker) delegate
            {
                if (cellTextBox.Location.X == 42 && cellTextBox.Location.Y == 79)
                {
                    if (sheet.GetCellValue("A1").ToString() != null)
                    {
                        cellContentsField.Text = sheet.GetCellContents("A1").ToString();
                        cellValueField.Text    = sheet.GetCellValue("A1").ToString();
                        cellTextBox.Text       = sheet.GetCellValue("A1").ToString();
                    }
                    else
                    {
                        cellContentsField.Text = "";
                        cellValueField.Text    = "";
                        cellTextBox.Text       = "";
                    }
                }


                string name  = state.CellName;
                string value = "";
                try
                {
                    //store contents in backing sheet
                    if (state.Contents.Length > 0 && state.Contents[0] == '=')
                    {
                        sheet.SetContentsOfCell(name, state.Contents.ToUpper());
                    }
                    else
                    {
                        sheet.SetContentsOfCell(name, state.Contents);
                    }

                    object valueObj = "";
                    //get value of cell from backing sheet
                    if (sheet.GetCellContents(name) is String && !sheet.GetCellContents(name).Equals(""))
                    {
                        valueObj = sheet.GetCellValue(name);
                    }

                    //handle formula errors
                    if (valueObj.GetType().Equals(typeof(FormulaError)))
                    {
                        FormulaError fe = (FormulaError)valueObj;
                        value           = fe.Reason;
                    }
                    //store value of cell
                    else
                    {
                        value = valueObj.ToString();
                    }
                }
                catch (FormulaFormatException ffe)
                {
                    value = ffe.Message;
                }

                cellValueField.Text = value;
                spreadsheetPanel1.SetValue(state.Col, state.Row, value);

                try
                {
                    foreach (string s in sheet.CheckValues(name))
                    {
                        int row, col;
                        Int32.TryParse(s.Substring(1, s.Length - 1), out row);
                        col = s[0] - 65;
                        spreadsheetPanel1.SetValue(col, row - 1, sheet.GetCellValue(s).ToString());
                        cellValueField.Text = sheet.GetCellValue(s) + "";
                        UpdateGUIFields(s);
                    }
                }
                catch (InvalidCastException e)
                {
                    MessageBox.Show("You can't do that");
                }

                updateCells(name);

                cellTextBox.Text = "";
                contentsChanged  = false;
            });
        }