C# c文本框到数据库

C# c文本框到数据库,c#,winforms,C#,Winforms,我在C WinForm上有一个dataGridView、textBoxFirstName、buttonSelect和buttonUpdate。我的问题末尾有代码 当我单击buttonSelect按钮时,选择结果会毫无问题地显示到dataGridView和textBoxFirstName。当我从dataGridView中选择不同的记录时,textBoxFirstName也会自动更新 当我从dataGridView更改FirstName字段并单击buttonUpdate时,FirstName字段将毫

我在C WinForm上有一个dataGridView、textBoxFirstName、buttonSelect和buttonUpdate。我的问题末尾有代码


当我单击buttonSelect按钮时,选择结果会毫无问题地显示到dataGridView和textBoxFirstName。当我从dataGridView中选择不同的记录时,textBoxFirstName也会自动更新

当我从dataGridView更改FirstName字段并单击buttonUpdate时,FirstName字段将毫无问题地保存到数据库中

但是,当我从textBoxFirstName更改FirstName时,当我单击按钮Update时,数据不会保存到数据库中

在单击textBoxFirstName和buttonUpdate进行更改时,如何将FirstName字段保存到数据库中

多谢各位

public partial class Form1 : Form
{

    private const string connectionString = "Server=localhost;Database=AdventureWorks2008R2;Trusted_Connection=True";
    private SqlConnection con;
    private SqlDataAdapter dataAdapter;

    public Form1()
    {
        InitializeComponent();
        con = new SqlConnection(connectionString);
    }

    private void FillGrid(string sqlCommand)
    {
        dataAdapter = new SqlDataAdapter(sqlCommand, con);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

        DataTable dataTable = new DataTable();
        dataAdapter.Fill(dataTable);

        dataGridView.DataSource = dataTable;
        textBoxFirstName.DataBindings.Clear();
        textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName");
    }

    private void buttonSelect_Click(object sender, EventArgs e)
    {
        FillGrid("SELECT TOP 100 * FROM Person.Person");
    }

    private void buttonUpdate_Click(object sender, EventArgs e)
    {
        dataAdapter.Update((DataTable)dataGridView.DataSource);
    }
}

这是因为在按钮内单击Update_将使用网格的数据源更新dataAdapter。所以网格中的任何内容都会存储在数据库中,但文本框中的文本不会。您还需要使用textBoxFirstName的数据源更新数据适配器。希望有帮助。

正如有人告诉你的那样,当你点击按钮更新时,你没有更新文本框的数据。你只更新GridView数据。现在试试这个

private void buttonUpdate_Click(object sender, EventArgs e)
{
    dataAdapter.Update((DataTable)dataGridView.DataSource);
    textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName");
}

网格的数据源是dataTable。textBoxFirstName绑定到dataTable tooI尝试了所有建议,但不幸的是,我仍然无法解决问题。请使用参数化查询避免SQL注入@拉维,但他在他的报告中没有使用任何参数query@AndreyGordeev他使用内联选择Person.Person中的前100个*。而且在sql中使用*成本更高谢谢。这段代码是一个简单解释问题的示例。安全性和性能在本例中并不重要。@jack85,请检查您在textbox中所做的更改是否影响了dataTabledataGridView和textBoxFirstName使用的是相同的数据源dataTable:dataGridView.DataSource=dataTable;textBoxFirstName.DataBindings.AddText,dataTable,FirstName;下面的代码不应该同时将dataGridView和textBoxFirstName保存到数据库中,因为它们使用相同的数据源吗?dataAdapter.UpdateDataTabledataGridView.DataSource@但是问题是gridview和textbox本身都是单独绑定的……不幸的是,上面的例子和下面的例子并没有解决这个问题。我无法准确地理解我在哪里犯了错误:\private void button update\u Clickobject sender,EventArgs e{dataAdapter.updatedatabletextboxfirstname.DataBindings[0]。DataSource;dataAdapter.updatedatabledatagridview.DataSource;}