Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅获取值已更改的文本框_C#_Asp.net - Fatal编程技术网

C# 仅获取值已更改的文本框

C# 仅获取值已更改的文本框,c#,asp.net,C#,Asp.net,我有用户信息,当我从gridview中单击名称时,它会将SQL中的数据填充到文本框中。诸如名字、姓氏、地址、电子邮件等数据。我有大约30个文本框和下拉列表 我只想从文本框中获取值,该值已更改,并在sql查询中更新它们。例如:只有中间名和地址已更改,因此查询将只更新此字段,而不是所有30个左右的字段 我尝试这个只是为了测试,但它不起作用。有什么想法吗 protected void btnUpdateChanges_Click(object sender, EventArgs e) { tb

我有用户信息,当我从gridview中单击名称时,它会将SQL中的数据填充到文本框中。诸如名字、姓氏、地址、电子邮件等数据。我有大约30个文本框和下拉列表

我只想从文本框中获取值,该值已更改,并在sql查询中更新它们。例如:只有中间名和地址已更改,因此查询将只更新此字段,而不是所有30个左右的字段

我尝试这个只是为了测试,但它不起作用。有什么想法吗

protected void btnUpdateChanges_Click(object sender, EventArgs e)
{
    tbFirstName.TextChanged += new EventHandler(txt_TextChanged);
    tbLastName.TextChanged += new EventHandler(txt_TextChanged);
    tbMiddleName.TextChanged += new EventHandler(txt_TextChanged);
}

void txt_TextChanged(object sender, EventArgs e)
{
    TextBox txt = sender as TextBox;
    switch (txt.ID)
    {
        case "tbFirstName":
            lblMessage.Text = "First Name changed";
            break;
        case "tbLastName":
            break;
        case "tbMiddleName":
            break;
    }
} 

将初始值存储在会话变量中,然后更新它,然后在单击或其他操作时使用存储的会话更新数据库。

为什么不对文本框进行子类化,并让它告诉是否已修改

而不是textbox.Text=“some Text”用户myTextBox.SetText(“some Text”)

然后只需检查TextModified属性,查看当前文本是否与原始文本不同

public class MyTextBox : TextBox {

    private string originalText = null;

    public MyTextBox()
        : base() {
    }

    public bool TextModified {
        get {
            if (this.OriginalText != this.Text) return true;
            return false;
        }
    }

    public string OriginalText {
        get { return this.originalText; }
        internal set { this.originalText = value; }
    }

    public void SetText(string text) {
        this.Text = text;
        this.OriginalText = text;
    }

}

您必须将初始值存储在某个位置,并对其进行查找,最后更新表“它不起作用”不是一个好的解释。旁注:根据您的数据库结构,更新一个字段和所有字段可能不会显示任何性能差异。@Rex-虽然这是一个好建议,但如果您决定将注释转换为答案(存储在会话状态),请确保避免在每次请求时先从数据库读取值@AlexeiLevenkov ok:)@Rex我知道你可以在变量中存储值。但是如果我有100个文本框,我必须将它们全部存储在一个单独的变量中。我只是想问是否有一种方法可以让改变了的那一个。