Обновление базы данных Используя Datagridview

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

Как я добавляю, редактирую, удаляю, обновляют мою базу данных в datagridview использующие коды?

Это мои коды:

namespace Icabales.Homer
{
    public partial class Form1 : Form
{
    SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\users\homer\documents\visual studio 2010\Projects\Icabales.Homer\Icabales.Homer\Database1.mdf;Integrated Security=True;User Instance=True");
    SqlCommand cmd = new SqlCommand();
    SqlDataReader dr;
    SqlDataAdapter da;
    DataTable dt = new DataTable();
    public Form1()
    {
        InitializeComponent();
    }
    private void bindgrid()
    {
        string command = "select * from info";
        da = new SqlDataAdapter(command, cn);
        da.Fill(dt);
        dataGridView1.DataSource = dt;
    }
    private void Form1_Load(object sender, EventArgs e)
    {
       //TODO: This line of code loads data into the 'database1DataSet.info' table. You can move, or remove it, as needed.
        this.infoTableAdapter.Fill(this.database1DataSet.info);
        cmd.Connection = cn;
        loadlist();
        bindgrid();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (txtid.Text != "" & txtname.Text != "")
        {
            cn.Open();
            cmd.CommandText = "insert into info (id,name) values ('" + txtid.Text + "' , '" + txtname.Text + "')";
            cmd.ExecuteNonQuery();
            cmd.Clone();
            MessageBox.Show("Record Inserted");
            cn.Close();
            txtid.Text = "";
            txtname.Text = "";
            loadlist();
        }
    }
    private void loadlist()
    {
        listBox1.Items.Clear();
        listBox2.Items.Clear();
        cn.Open();
        cmd.CommandText = "select * from info";
        dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            while (dr.Read())
            {
                listBox1.Items.Add(dr[0].ToString());
                listBox2.Items.Add(dr[1].ToString());
            }
        }
        cn.Close();             
    }

    private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListBox l = sender as ListBox;
        if (l.SelectedIndex != -1)
        {
            listBox1.SelectedIndex = l.SelectedIndex;
            listBox2.SelectedIndex = l.SelectedIndex;
            txtid.Text = listBox1.SelectedItem.ToString();
            txtname.Text = listBox2.SelectedItem.ToString();
        }

    }

    private void button2_Click(object sender, EventArgs e)
    {
        if (txtid.Text != "" & txtname.Text != "")
        {
            cn.Open();
            cmd.CommandText = "delete from info where id = '"+txtid.Text+"'and name = '"+txtname.Text+"'";
            cmd.ExecuteNonQuery();
            cn.Close();
            MessageBox.Show("Record Deleted");
            loadlist();
            txtid.Text = "";
            txtname.Text = "";
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        if (txtid.Text != "" & txtname.Text != "" & listBox1.SelectedIndex != -1)
        {
            cn.Open();
            cmd.CommandText = "update info set id='"+txtid.Text+"',name='"+txtname.Text+"'where id='"+listBox1.SelectedItem.ToString()+"' and name='"+listBox2.SelectedItem.ToString()+"'";
            cmd.ExecuteNonQuery();
            cn.Close();
            MessageBox.Show("Record Updated");
            loadlist();
            txtid.Text = "";
            txtname.Text = "";
        }
    }
}

}

2
nl ja de

4 ответы

У меня есть dataGridView и кнопка на форме. Когда я делаю любое редактирование, вставку или удаление в dataGridView1, код ниже делает волшебство

public partial class EditPermit : Form
{
     OleDbCommand command;
     OleDbDataAdapter da;
     private BindingSource bindingSource = null;
     private OleDbCommandBuilder oleCommandBuilder = null;
     DataTable dataTable = new DataTable();

    public EditPermit()
    {
        InitializeComponent();
    }

    private void EditPermitPermit_Load(object sender, EventArgs e)
    {
        DataBind();                           
    }

    private void btnSv_Click(object sender, EventArgs e)
    {
         dataGridView1.EndEdit(); //very important step
         da.Update(dataTable);
         MessageBox.Show("Updated");        
         DataBind(); 
    }

    private void DataBind()
    {
        dataGridView1.DataSource = null;
        dataTable.Clear();

        String connectionString = MainWindow.GetConnectionString(); //use your connection string please
        String queryString1 = "SELECT * FROM TblPermitType";//Use your table please

        OleDbConnection connection = new OleDbConnection(connectionString);
        connection.Open();
        OleDbCommand command = connection.CreateCommand();
        command.CommandText = queryString1;
        try
        {
            da = new OleDbDataAdapter(queryString1, connection);
            oleCommandBuilder = new OleDbCommandBuilder(da);
            da.Fill(dataTable);
            bindingSource = new BindingSource { DataSource = dataTable }; 
            dataGridView1.DataSource = bindingSource;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


    }
2
добавлено

Изучите ссылку ниже. Это могло бы помочь вам

http://www.codeproject.com/Articles/17318/Add-Edit-and-Delete-in-DataGridView-with-Paging

0
добавлено

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

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

Пока ваш DataGridView1 позволили свойствам для пользователей добавлять/удалять/редактировать ряды, вы могли использовать следующий код.

DataAdapter.Update(DataTable);
//in your code this would be:
da.Update(dt);

DataAdapter. Обновление() Метод будет автомобиль производить, любой вставляет/обновляет/удаляет команды, должен был обновить результаты вашего заполнять вопрос по сравнению с текущими данными в вашем datagridview .
Можно установить те команды (свойства) также в случае, если вы предпочитаете изменять их, хотя это не необходимо.

Это только работает, конечно после того, как пользователь внес изменения в DataGridView . Добавьте этот код к простой кнопке и посмотрите, есть ли у вас удача. Это определенно было что-то это простое:)

0
добавлено
@HOmer вы могли добавить его в button_click событие, например.
добавлено автор AssaultingCuccos, источник
поместите код в метод, где вы хотите спасти you' ре datagridview изменяется в базу данных. Включение loadlist метода могло бы работать да. Хотя лично, для тестирования целей, я создал бы новую кнопку и datagridview. И затем когда кнопка нажата, чтобы сохранить данные и загрузить второй datagridview, чтобы видеть, загружает ли это изменения.
добавлено автор AssaultingCuccos, источник
Куда я помещаю, который кодирует?
добавлено автор HOmer, источник
как я использую его? я могу поместить его в метод loadlist?
добавлено автор HOmer, источник

Я осуществил решение, которое вставляет/обновляет/удаляет данные в базу данных SQL MS непосредственно от DataGridView. Чтобы достигнуть этого, я использовал следующие события: RowValidating и UserDeletingRow.

Предполагается, что вы имеете

SqlConnection _conn;

объявленный и инициализированный. Вот код:

    private void dgv_RowValidating( object sender, DataGridViewCellCancelEventArgs e )
    {
        try
        {
            if (!dgv.IsCurrentRowDirty)
                return;

            string query = GetInsertOrUpdateSql(e);
            if (_conn.State != ConnectionState.Open)
                _conn.Open();

            var cmd = new SqlCommand( query, _conn );
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show( ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning );
        }
    }

    public string GetInsertOrUpdateSql( DataGridViewCellCancelEventArgs e )
    {
        DataGridViewRow row = dgv.Rows[e.RowIndex];
        int id = 0;
        int.TryParse( row.Cells["Id"].Value.ToString(), out id );

        DateTime dob;
        DateTime.TryParse( row.Cells["Dob"].Value.ToString(), out dob );

        string email = row.Cells["Email"].Value.ToString();
        string phone = row.Cells["Phone"].Value.ToString();
        string fio = row.Cells["Fio"].Value.ToString();

        if (id == 0)
            return string.Format( "insert into {0}  Values ('{1}','{2}','{3}','{4}')", "dbo.People", fio, dob.ToString( "dd-MM-yyyy" ), email, phone );
        else
            return string.Format( "update {0} set Fio='{1}', Dob='{2}', Email='{3}', Phone='{4}' WHERE Id={5}", "dbo.People", fio, dob.ToString( "dd-MM-yyyy" ), email, phone, id );
    }
    private void dgv_UserDeletingRow( object sender, DataGridViewRowCancelEventArgs e )
    {
        try
        {
            int id = 0;
            int.TryParse( e.Row.Cells["Id"].Value.ToString(), out id );
            string query = string.Format( "DELETE FROM {0} WHERE Id = {1}", "dbo.People", id );
            var cmd = new SqlCommand( query, _conn );
            if (_conn.State != ConnectionState.Open)
                _conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show( ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning );
        }
    }

Надежда это помогает.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot