c#数据窗口中就一个保存按钮,修改完数据后按保存按钮保存数据,如何编写?多谢!修改完保存后仍是原来的数据?

如题所述

是直接输入表达式进行计算的?
第一种简单,无非就是做一些按钮并执行制定操作而已。
第二种我写了两份,分别使用正则表达式和语法分析技术
使用正则表达式的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Drawing;

namespace Eval
{
public class EvalEventArgs : EventArgs
{
public EvalEventArgs(string Expressions)
{
this.Expressions = Expressions;
}
public string Expressions
public string Message
}

public class Function
{
static Regex Num = new Regex(@"(\-?\d+\.?\d*)");
static Regex Power = new Regex(Num.ToString() + @"\^" + Num.ToString());
static Regex AddSub = new Regex(Num.ToString() + "([+-])" + Num.ToString());
static Regex MulDiv = new Regex(Num.ToString() + "([*/])" + Num.ToString());
static Regex AndXor = new Regex(Num.ToString() + "(and|xor)" + Num.ToString());
static Regex InnerRegex = new Regex(@"\([^\(\)]+\)");
static Regex FunctionRegex = new Regex(@"(ln|lg|sin|cos|tan|ctg|sh|ch|th|arcsin|arccos|arctan|not)" +Num.ToString());
static Regex LBrackets = new Regex(@"\{|\[");
static Regex RBrackets = new Regex(@"\}|\]");
const double PI = Math.PI;
const double e = Math.E;

public event EventHandler<EvalEventArgs> Evaling;
public event EventHandler<EvalEventArgs> EvalComplent;
public event EventHandler<EvalEventArgs> Error;

private void OnError(string Expressions, string Message)
{
if (Error != null) Error(this, new EvalEventArgs(Expressions) );
IsAbort = true;
}

private bool IsAbort = false;

/// <summary>计算表达式</summary>
/// <param name="Expressions">表达式</param>
public void Eval(string Expressions)
{
IsAbort = false;
Expressions = Expressions.ToLower();
Expressions = Expressions.Replace("pi", Math.PI.ToString()).Replace("e",Math.E.ToString());
Expressions = LBrackets.Replace(Expressions, (Match match) => );
Expressions = RBrackets.Replace(Expressions, (Match match) => );
if (Check(Expressions))
{
try
{
do
{
Expressions = InnerRegex.Replace(Expressions, (Match match) =>
{
return EvalInner(match.Value.Substring(1, match.Value.Length - 2));
});
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}
while (InnerRegex.IsMatch(Expressions) && !IsAbort);
if(!IsAbort) Expressions = EvalInner(Expressions);
if (!IsAbort && EvalComplent != null) EvalComplent(this, new EvalEventArgs(Expressions));
}
catch(Exception ex)
{
OnError(Expressions, ex.Message);
}
}
}

/// <summary>
/// 用于计算不含括号的表达式的值
/// </summary>
/// <param name="Expressions">要计算的表达式</param>
/// <returns>计算结果</returns>
public string EvalInner(string Expressions)
{
while (FunctionRegex.IsMatch(Expressions) && !IsAbort)
{
Expressions = FunctionRegex.Replace(Expressions, (Match match) => );
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}

while (AndXor.IsMatch(Expressions) && !IsAbort)
{
Expressions = AndXor.Replace(Expressions, (Match match) =>
{
double P1=double.Parse(match.Groups[1].Value);
double P2=double.Parse(match.Groups[3].Value);
if((uint)P1!=P1 || (uint)P1!=P1 )
OnError(Expressions,"");
if (match.Value.Contains("and"))
return ((uint)P1 & (uint)P2).ToString();
else
return ((uint)P1 ^ (uint)P2).ToString();
});
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}

while (Power.IsMatch(Expressions) && !IsAbort)
{
Expressions = Power.Replace(Expressions, (Match match) =>
{
return System.Math.Pow(double.Parse(match.Groups[0].Value), double.Parse(match.Groups[2].Value)).ToString();
});
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}

while (MulDiv.IsMatch(Expressions) && !IsAbort)
{
Expressions = MulDiv.Replace(Expressions, (Match match) =>
{
if (match.Value.Contains("*"))
return (double.Parse(match.Groups[1].Value) * double.Parse(match.Groups[3].Value)).ToString();
else
return (double.Parse(match.Groups[1].Value) / double.Parse(match.Groups[3].Value)).ToString();
});
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}

while (AddSub.IsMatch(Expressions) && !IsAbort)
{
Expressions = AddSub.Replace(Expressions, (Match match) =>
{
if (match.Value.Contains("+"))
return (double.Parse(match.Groups[1].Value) + double.Parse(match.Groups[3].Value)).ToString();
else
return (double.Parse(match.Groups[1].Value) - double.Parse(match.Groups[3].Value)).ToString();
});
if (Evaling != null) Evaling(this, new EvalEventArgs(Expressions));
}

return IsAbort ? null : Expressions;
}

/// <summary>
/// 用于计算单变量函数表达式的值
/// </summary>
/// <param name="Expressions">要计算的表达式</param>
/// <returns>计算结果</returns>
public string EvalSingle(string Expressions)
{
while (FunctionRegex.IsMatch(Expressions) && !IsAbort)
{
Expressions = FunctionRegex.Replace(Expressions, (Match match) => );
}

return IsAbort ? null : Expressions;
}

private string EvalSingle(Match match)
{
//ln|lg|sin|cos|tan|ctg|sh|ch|th|arcsin|arccos|arctan
double Param = double.Parse(match.Groups[2].Value.Trim(char.Parse("("), char.Parse(")")));
double Result = double.NaN;
if (!double.IsNaN(Param))
{
if (match.Value.StartsWith("ln"))
{
if (Param > 0)
Result = System.Math.Log(Param);
else
OnError(match.Value, "表达式中有错误:对数的真数不能小于零!");
}
else if (match.Value.StartsWith("lg"))
{
if (Param > 0)
Result = System.Math.Log10(Param);
else
OnError(match.Value, "表达式中有错误:对数的真数不能小于零!");
}
else if (match.Value.StartsWith("sin"))
Result = System.Math.Sin(Param * PI / 180);
else if (match.Value.StartsWith("sqrt"))
Result = System.Math.Sqrt(Param);
else if (match.Value.StartsWith("cos"))
Result = System.Math.Cos(Param * PI / 180);
else if (match.Value.StartsWith("tan"))
Result = System.Math.Tan(Param * PI / 180);
else if (match.Value.StartsWith("ctg"))
Result = 1 / System.Math.Tan(Param * PI / 180);
else if (match.Value.StartsWith("sh"))
Result = System.Math.Sinh(Param);
else if (match.Value.StartsWith("ch"))
Result = System.Math.Cosh(Param);
else if (match.Value.StartsWith("th"))
Result = System.Math.Tanh(Param);
else if (match.Value.StartsWith("arcsin"))
Result = System.Math.Asin(Param);
else if (match.Value.StartsWith("arccos"))
Result = System.Math.Acos(Param);
else if (match.Value.StartsWith("arctan"))
Result = System.Math.Atan(Param);
else if (match.Value.StartsWith("not"))
{
if (((uint)Param) != Param)
OnError(match.Value, "逻辑运算只能针对整数!");
else
Result = ~(uint)Param;
}
else
OnError(match.Value,"表达式含有不被支持的函数!");
}
else
OnError(match.Value, "表达式中有错误!");
if (double.IsInfinity(Result)) OnError(match.Value, "结果超出了范围!");
return Result == double.NaN ? null : Result.ToString();
}

/// <summary>
/// 对表达式进行检查,确保其格式符合要求
/// </summary>
/// <param name="Expressions">表达式</param>
/// <returns>是否符合要求</returns>
public bool Check(string Expressions)
{
if (!CheckBrackets(Expressions))
{
OnError(Expressions, "括号不匹配!");
return false;
}
else
return true;
}

/// <summary>
/// 检查括号是否匹配
/// </summary>
/// <param name="Expressions">表达式</param>
/// <returns>是否匹配</returns>
private bool CheckBrackets(string Expressions)
{
int Num = 0;
foreach (char c in Expressions)
{
if (c == char.Parse("("))
if (c == char.Parse(")"))
}
if (Num != 0) else
}
}
}

Evaling事件可以获取中间结果
EvalComplent事件表明计算完成
Error事件表明发生错误
调用方法:
Function f = new Function();
f.Eval(要计算的表达式)

语法分析的比较长,想要的话留下邮箱我发过去
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-05
你在 page——load()
里面加上 if(!ispostback)判断就能更新了追问

编码:SqlConnection thisConnection = new SqlConnection(@"...");
thisConnection.Open();
SqlDataAdapter thisAdapter =...
SqlCommandBuilder thisBuilder = ...
DataSet thisDataSet = new DataSet();
thisAdapter.Fill(thisDataSet, "bb");
thisAdapter.Update(thisDataSet, "bb");
怎么加?具体点,多谢!

追答

多贴点代码 这么少 不行+qq 307232494

追问

窗口中就一个保存按钮,每页只显示一条记录,保存按钮只这些代码,运行也验证执行了,我认为只是上面又重新连接数据库,数据是修改前的,在上面代码基础上怎么修改?多谢!

本回答被网友采纳

C#中如何设置点击“保存”按钮,使textbox里的信息保存下来的功能_百 ...
可以的,代码:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="huaxueOrderWeb.Model.WebForm1" %> <!DOCTYPE html PUBLIC "-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN" "http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd"> ...

C#中如何设置点击“保存”按钮,使textbox里的信息保存下来的功能_百 ...
你可以在Save按钮的事件处理中做保存的工作当然注册FormClosing事件也可以的,这种东西需要你自己写一套保存的机制,来做相应Form的保存,比如Closing的时候保存的某个文件,Open的时候从文件中读取等等 草薙在 | 发布于2010-07-05 举报| 评论 2 0 保存到数据库··然后打开窗体的 page load 里面 绑定数据就好了 ...

...后,怎样通过保存修改按钮把数据保存到数据库中,要源代码
string a = this.GridView2.DataKeys[e.RowIndex][0].ToString();string str = ((TextBox)this.GridView2.Rows[e.RowIndex].Cells[0].Controls[0]).Text;string ds = ((TextBox)this.GridView2.Rows[e.RowIndex].Cells[1].Controls[0]).Text;SqlConnection con = new SqlConnection("D...

c#窗体中一个按钮单击修改文本框内容 另一个按钮单击时保存文本框内容...
sw.Close();fs.Close();MessageBox.Show("保存成功!");} } } 修改是直接就可以修改了,不用加事件了。

c#按保存按钮能够保存所有文本框中的值到数据库中的后台代码这么写,好 ...
例如你前台页面有Id="txtName" Id="txtAge"等八个文本框,和一般额button按钮,点击button按钮,在后台会生成一个方法!在这个放法里面。string name=txtName.text;string age=txtAge.text;等,用类似的放法都取到!然后写一个方法!例如:public int addUser(string name,int age){ \/\/链接数据...

C#中如何通过点击一个窗体上button,给另一窗体上的textbox赋值_百度知...
用Form2的属性保存Form2的值,在Form1中访问Fomr2的属性Form1的代码: public partial class Form1 : Form { publicForm1() { InitializeComponent(); } privatevoid button1_Click(objectsender, EventArgs e) { Form2form2=new Form2(); form2.ShowDialog(); ...

C#中我添加了一个保存按钮“保存S”,但如何实现快捷键的方式?
在事件里写代码, 我给你段代码你改下, 就可以用了,private void LoginForm_KeyDown(object sender, KeyEventArgs e){ if (e.KeyCode == Keys.Enter){ lblLogin_Click(sender, e);} if (e.KeyCode == Keys.Escape){ \/\/lblExit_Click(sender, e);} } 事件的名称是:KeyDown Keys.(这个有...

C# FastReport.Net 设计器工具栏保存(Save)按钮事件怎么改写自己想要的...
如果你是用VS开发你可以拖一个 控件,然后点击拖好的控件,找到保存事件 CutomSaveDialog,表示保存的对话框,这个只有另存为才有,Custom SaveReport,表示保存报表时发生,意思就是点击保存按钮发生的事件!希望能帮助到你!

在c#中,如何使dataGridView中的数据能够修改并且保存的数据库中?
在DATAGRIDVIEW中增加数据比较简单~就是一句SQL插入语句就OK了,修改和删除数据就需要获取到当前选中行的数据,具体方法如下:在DATAGRIDVIEW的CellClick事件(单击事件)中:\/\/这就是得到当前行的第四列的数据。string data=this.dataGridView1.CurrentRow.Cells[3].Value.ToString();然后你只需要将每一...

C#如何实现等待界面上任意一个按钮按下再执行语句后面的操作呢,界面...
bt_start.Click += new EventHandler(bt_start_Click); } \/\/\/ \/\/\/ 按下了某个按钮 \/\/\/ \/\/\/ \/\/\/ private void button1_Click(object sender,

相似回答