DataGridView Редактировать ячейку - PullRequest
0 голосов
/ 19 июля 2011

мой последний вопрос был закрыт, потому что он не был ясен, поэтому я попробую еще раз, потому что мне действительно нужна помощь для этого ...

Я использую Visual Studio 2010 с подключением OLEDB. Прямо сейчас я разрабатываю форму окна. Я заметил, что datagridview позволяет вам иметь режим редактирования / добавления / удаления, поэтому я хочу иметь возможность использовать его.

То, что я хочу сделать, это использовать событие cellcontentchanged, используемое для редактирования моей базы данных. Когда я изменяю содержимое и ухожу, меня спросят, хочу ли я изменить эту ячейку. Если я скажу да, то эта ячейка будет изменена.

Я убедился ReadOnly = false и enabled = true. До того, что из того, что я прочитал, я бы просто сделал что-то вроде этого:

adapter.Update(dataset); 

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

edit: извините, если его все еще трудно понять!
вот код ...

    private void dgv_DataLookup_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {

        DialogResult dr;
        dr = MessageBox.Show("Are you sure you want to edit this field?", "Edit Cell", MessageBoxButtons.YesNo);

        if (dr == DialogResult.Yes)
        {
            //update the table in my database
        }
    }

это не много, но, надеюсь, вы можете попытаться увидеть, что я пытаюсь сделать

изменить еще раз: это весь соответствующий код для этой части (это код, который отображает сетку данных, которую я хочу редактировать)

    OleDbConnection cs;
    OleDbDataAdapter da = new OleDbDataAdapter();

    DataSet dsB = new DataSet();



    //If clicked search button
        else if (combo_View.Text == "Orders")
        {

            da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE (VendorName = @VendorName OR @VendorName = '') AND (CustomerName = @CustomerName OR @CustomerName = '')  AND ((@From IS NULL AND @To IS NULL) OR orderDate BETWEEN @From AND @To) AND (ItemNum = @ItemNum OR @ItemNum = '') AND (PO = @PO OR @PO = '') ORDER BY CustomerName", cs);

            da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString();
            da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString();

            if (!chk_viewAllDates.Checked)
            {
                da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = "#" + tp_viewFrom.Value.Date.ToString("M/d/yyyy") + "#";
                da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = "#" + tp_viewTo.Value.Date.ToString("M/d/yyyy") + "#";
            }

            else
            {
                da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = DBNull.Value;
                da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = DBNull.Value;
            }

            da.SelectCommand.Parameters.Add("@PO", OleDbType.VarChar).Value = txt_POLookup.Text.ToString();
            da.SelectCommand.Parameters.Add("@ItemNum", OleDbType.VarChar).Value = combo_ItemNumLookup.Text.ToString();

            dsB.Clear();
            da.Fill(dsB);
            dgv_DataLookup.DataSource = dsB.Tables[0];

        }

пожалуйста, дайте мне знать, если вам нужно больше кода. любая помощь приветствуется :)

Ответы [ 2 ]

0 голосов
/ 20 июля 2011

Исправил это сам.Просто используйте owningcolumn owningrow, чтобы получить нужные мне значения.Спасибо

0 голосов
/ 19 июля 2011

Я не совсем уверен, что вы спрашиваете здесь, но я сделаю некоторые предположения, что вы просто спрашиваете, как сохранить отредактированные данные обратно в базу данных.Я бы не использовал событие CellValueChanged.Обычно вы просто позволяете пользователю редактировать данные в сетке, а затем нажимаете кнопку «Сохранить» или сохраняете данные при закрытии формы.

void Save()
{ 
    OleDbConnection con=new OleDbConnection("Put your connect string here");
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM TestQuery", con);
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
    DataTable tbl = dsB.Tables[0];
    da.Update(tbl);
    tbl.AcceptChanges();
}

Возможно, вы захотите повторно использовать некоторые объекты, которые вы уже создали, например, соединение, но это основы.

...