Обновить базу данных из datagridview - PullRequest
0 голосов
/ 28 декабря 2011

Я много гуглил при обновлении datagridview в базу данных после редактирования с помощью адаптера.Я ссылался на несколько веб-сайтов, которые приводили мне похожие примеры, подобные приведенному ниже.Тем не менее, я получаю сообщение об ошибке «ArgumentNullException is unhandled» в первой строке моего button2_Click.

Я новичок в программировании, и меня научили объявлять адаптер глобальным, и я это сделал.Почему я все еще получаю нулевое значение?Любая помощь будет оценена.Спасибо!

DataTable dt;
DataSet ds;
OleDbDataAdapter objAdapter = new OleDbDataAdapter();

public void button1_Click(object sender, EventArgs e)
{
    //Bind button
    string txt = textBox1.Text;

    string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb";
    string strSqlStatement = string.Empty;
    strSqlStatement = "SELECT * FROM jiahe WHERE [User] = '" + txt + "'";
    OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
    objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);
    DataSet ds = new DataSet();
    dataGridView1.DataSource = ds;
    objAdapter.Fill(ds);

    DataTable dt = ds.Tables[0];
    dataGridView1.DataSource = dt.DefaultView;           

    try
    {
        if (dt.Rows.Count == 1)
        {
            MessageBox.Show("Record found.");
        }
        else
        {
            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("Invalid input!");
            }
        }
    }
    catch
    {
        MessageBox.Show("Error!");
    }
}

private void button2_Click(object sender, EventArgs e)
{
    objAdapter.Update(ds);
    dataGridView1.DataSource = ds;
}

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Я думаю, что это просто путаница между переменными в разных областях. ds, который вы используете во втором button_click , - это не тот набор данных , который вы используете для заполнения сетки. Сделайте их точно таким же экземпляром , и это, скорее всего, сработает.

Редактировать

чтобы сделать так, должно быть достаточно , чтобы писать вместо

DataSet ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
DataTable dt = ds.Tables[0];`

Это

ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
DataTable dt = ds.Tables[0];`
0 голосов
/ 29 апреля 2015

Я столкнулся с той же проблемой, и я решил ее, попробовав это:

DataSet ds = new DataSet();
dataGridView1.DataSource = ds;
objAdapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
...