0

我已经使用以下代码在表上添加了我的数据(在 DataGrid 上使用 SqlCE):

private void btn_functions_Click(object sender, EventArgs e)
        {
            string conSTR = @"Data Source=C:\Users\Zet\DB\javascript_db.sdf";
            SqlCeConnection connection = new SqlCeConnection(conSTR);

            string sql = "SELECT * FROM Functions";
            connection.Open();

            SqlCeCommand cmd = new SqlCeCommand(sql, connection);
            SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);

            //for datagridview for js
            dg_JS1.DataSource = ds.Tables[0];
            connection.Close();
        }

(您可以在这里查看结果: http: //oi42.tinypic.com/30sc6qf.jpg

问题是我不知道如何将特定单元格直接添加/编辑/删除到数据网格本身。并直接保存到我在数据库中的表中。

示例场景将有 3 个按钮用于添加/编辑/删除,然后假设我在单元格上添加文本,然后当我按 btn_Add 时,数据应添加到数据网格中并直接到表中,如果我按 btn_Edit,我更新的所有数据都应更新从 datagrid 到 db,如果删除,我选择的所有数据/单元格中的文本将自动删除,与 table 相同。

或其他想法可以是...

知道我该怎么做吗?

提前非常感谢!更多的力量!

4

1 回答 1

0

我解决了没有按钮的问题。在下面的代码中,我将举例说明连接和更新如何与 mysql 数据库一起工作(在运行时更新):

代码

DataTable dt = null;
DataGridView dgv1 = null;

如果表单加载,您必须将 dt 变量设置为新的数据表:

    private void Form1_Load(object sender, EventArgs e)
{
    dt = new DataTable();



    using (MySqlConnection conn = new MySqlConnection("datasource=localhost;port=3306;username=root;password=1234"))
    {
        conn.Open();
        using (MySqlCommand cmd = new MySqlCommand())
        {
            cmd.Connection = conn;
            cmd.CommandText = "select *from try.data ;";
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(dt);
        }
        conn.Close();
    }

    dgv1 = new DataGridView();
    dgv1.AllowUserToAddRows = false;
    dgv1.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit);
    dgv1.CellValidating += new DataGridViewCellValidatingEventHandler(dgv_CellValidating);
    dgv1.Dock = DockStyle.Fill;
    dgv1.DataSource = dt;

    this.Controls.Add(dgv1);
}

您必须设置两个事件: CellValidating

private void dgv_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        InitializeComponent();
        if (e.ColumnIndex == 0)
        {
            dgv1.CancelEdit();
        }
    }

和 CellValidating 事件:

private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        string id = dt.Rows[e.RowIndex]["Eid"] + "";
        string col = dt.Columns[e.ColumnIndex].ColumnName;
        string data = dgv1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value + "";

        string sql = string.Format("UPDATE `try`.`data` SET `{0}` = '{1}' WHERE Eid = {2};", col, data, id);

        using (MySqlConnection conn = new MySqlConnection("datasource=localhost;port=3306;username=root;password=1234"))
        {
            conn.Open();
            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
            conn.Close();
        }
    }

这实际上适用于 MySql,但在 Sql 中是“平等”组件,如 SqlConnection 或 SqlCommand ......我希望这能解决你的问题。祝你今天过得愉快!

于 2014-10-30T14:20:18.937 回答