【发布时间】:2020-06-13 02:58:34
【问题描述】:
我正在尝试通过 controls.find 访问 DataGridView 以更新数据库然后刷新它(它的数据源是 DataSet)。
这是我目前拥有的代码:
conn = new MySqlConnection(connStr);
conn.Open();
commandInsert = new MySqlCommand(@"INSERT INTO logbook.item
(id_type,id_parent,column0001,column0002,column0003,column0004,column0005,column0006,column0007,column0008,column0009,column0010,column0011,column0012,
column0013,column0014,column0015,column0016,column0017,column0018,column0019,column0020,column0021,column0022,column0023,column0024,column0025,
column0026,column0027,column0028,column0029,column0030,column0031,column0032,column0033,column0034,column0035,column0036,column0037,column0038,
column0039,column0040,column0041,column0042,column0043,column0044,column0045,column0046,column0047,column0048,column0049,column0050)
VALUES
(@id_type,@id_parent,@column0001,@column0002,@column0003,@column0004,@column0005,@column0006,@column0007,@column0008,@column0009,@column0010,
@column0011,@column0012,@column0013,@column0014,@column0015,@column0016,@column0017,@column0018,@column0019,@column0020,@column0021,@column0022,
@column0023,@column0024,@column0025,@column0026,@column0027,@column0028,@column0029,@column0030,@column0031,@column0032,@column0033,@column0034,
@column0035,@column0036,@column0037,@column0038,@column0039,@column0040,@column0041,@column0042,@column0043,@column0044,@column0045,@column0046,
@column0047,@column0048,@column0049,@column0050)", conn);
commandInsert.Parameters.AddWithValue("@id_type", 5);
commandInsert.Parameters.AddWithValue("@id_parent", 2);
commandInsert.Parameters.Add("@column0001", MySqlDbType.LongText, 15, "column0001");
commandInsert.Parameters.Add("@column0002", MySqlDbType.LongText, 15, "column0002");
commandInsert.Parameters.Add("@column0003", MySqlDbType.LongText, 15, "column0003");
commandInsert.Parameters.Add("@column0004", MySqlDbType.LongText, 15, "column0004");
commandInsert.Parameters.Add("@column0005", MySqlDbType.LongText, 15, "column0005");
commandInsert.Parameters.Add("@column0006", MySqlDbType.LongText, 15, "column0006");
commandInsert.Parameters.Add("@column0007", MySqlDbType.LongText, 15, "column0007");
commandInsert.Parameters.Add("@column0008", MySqlDbType.LongText, 15, "column0008");
commandInsert.Parameters.Add("@column0009", MySqlDbType.LongText, 15, "column0009");
commandInsert.Parameters.Add("@column0010", MySqlDbType.LongText, 15, "column0010");
commandInsert.Parameters.Add("@column0011", MySqlDbType.LongText, 15, "column0011");
commandInsert.Parameters.Add("@column0012", MySqlDbType.LongText, 15, "column0012");
commandInsert.Parameters.Add("@column0013", MySqlDbType.LongText, 15, "column0013");
commandInsert.Parameters.Add("@column0014", MySqlDbType.LongText, 15, "column0014");
commandInsert.Parameters.Add("@column0015", MySqlDbType.LongText, 15, "column0015");
commandInsert.Parameters.Add("@column0016", MySqlDbType.LongText, 15, "column0016");
commandInsert.Parameters.Add("@column0017", MySqlDbType.LongText, 15, "column0017");
commandInsert.Parameters.Add("@column0018", MySqlDbType.LongText, 15, "column0018");
commandInsert.Parameters.Add("@column0019", MySqlDbType.LongText, 15, "column0019");
commandInsert.Parameters.Add("@column0020", MySqlDbType.LongText, 15, "column0020");
commandInsert.Parameters.Add("@column0021", MySqlDbType.LongText, 15, "column0021");
commandInsert.Parameters.Add("@column0022", MySqlDbType.LongText, 15, "column0022");
commandInsert.Parameters.Add("@column0023", MySqlDbType.LongText, 15, "column0023");
commandInsert.Parameters.Add("@column0024", MySqlDbType.LongText, 15, "column0024");
commandInsert.Parameters.Add("@column0025", MySqlDbType.LongText, 15, "column0025");
commandInsert.Parameters.Add("@column0026", MySqlDbType.LongText, 15, "column0026");
commandInsert.Parameters.Add("@column0027", MySqlDbType.LongText, 15, "column0027");
commandInsert.Parameters.Add("@column0028", MySqlDbType.LongText, 15, "column0028");
commandInsert.Parameters.Add("@column0029", MySqlDbType.LongText, 15, "column0029");
commandInsert.Parameters.Add("@column0030", MySqlDbType.LongText, 15, "column0030");
commandInsert.Parameters.Add("@column0031", MySqlDbType.LongText, 15, "column0031");
commandInsert.Parameters.Add("@column0032", MySqlDbType.LongText, 15, "column0032");
commandInsert.Parameters.Add("@column0033", MySqlDbType.LongText, 15, "column0033");
commandInsert.Parameters.Add("@column0034", MySqlDbType.LongText, 15, "column0034");
commandInsert.Parameters.Add("@column0035", MySqlDbType.LongText, 15, "column0035");
commandInsert.Parameters.Add("@column0036", MySqlDbType.LongText, 15, "column0036");
commandInsert.Parameters.Add("@column0037", MySqlDbType.LongText, 15, "column0037");
commandInsert.Parameters.Add("@column0038", MySqlDbType.LongText, 15, "column0038");
commandInsert.Parameters.Add("@column0039", MySqlDbType.LongText, 15, "column0039");
commandInsert.Parameters.Add("@column0040", MySqlDbType.LongText, 15, "column0040");
commandInsert.Parameters.Add("@column0041", MySqlDbType.LongText, 15, "column0041");
commandInsert.Parameters.Add("@column0042", MySqlDbType.LongText, 15, "column0042");
commandInsert.Parameters.Add("@column0043", MySqlDbType.LongText, 15, "column0043");
commandInsert.Parameters.Add("@column0044", MySqlDbType.LongText, 15, "column0044");
commandInsert.Parameters.Add("@column0045", MySqlDbType.LongText, 15, "column0045");
commandInsert.Parameters.Add("@column0046", MySqlDbType.LongText, 15, "column0046");
commandInsert.Parameters.Add("@column0047", MySqlDbType.LongText, 15, "column0047");
commandInsert.Parameters.Add("@column0048", MySqlDbType.LongText, 15, "column0048");
commandInsert.Parameters.Add("@column0049", MySqlDbType.LongText, 15, "column0049");
commandInsert.Parameters.Add("@column0050", MySqlDbType.LongText, 15, "column0050");
commandUpdate = new MySqlCommand(@"UPDATE logbook.item
SET
id_item = @id_item,id_type = @id_type,id_parent = @id_parent,column0001 = @column0001,column0002 = @column0002,column0003 = @column0003,
column0004 = @column0004,column0005 = @column0005,column0006 = @column0006,column0007 = @column0007,column0008 = @column0008,column0009 = @column0009,
column0010 = @column0010,column0011 = @column0011,column0012 = @column0012,column0013 = @column0013,column0014 = @column0014,column0015 = @column0015,
column0016 = @column0016,column0017 = @column0017,column0018 = @column0018,column0019 = @column0019,column0020 = @column0020,column0021 = @column0021,
column0022 = @column0022,column0023 = @column0023,column0024 = @column0024,column0025 = @column0025,column0026 = @column0026,column0027 = @column0027,
column0028 = @column0028,column0029 = @column0029,column0030 = @column0030,column0031 = @column0031,column0032 = @column0032,column0033 = @column0033,
column0034 = @column0034,column0035 = @column0035,column0036 = @column0036,column0037 = @column0037,column0038 = @column0038,column0039 = @column0039,
column0040 = @column0040,column0041 = @column0041,column0042 = @column0042,column0043 = @column0043,column0044 = @column0044,column0045 = @column0045,
column0046 = @column0046,column0047 = @column0047,column0048 = @column0048,column0049 = @column0049,column0050 = @column0050
WHERE id_item = @id_item;", conn);
commandUpdate.Parameters.Add("id_item", MySqlDbType.LongText, 15, "id_item");
commandUpdate.Parameters.Add("@id_type", MySqlDbType.LongText, 15, "id_type");
commandUpdate.Parameters.Add("@id_parent", MySqlDbType.LongText, 15, "id_parent");
commandUpdate.Parameters.Add("@column0001", MySqlDbType.LongText, 15, "column0001");
commandUpdate.Parameters.Add("@column0002", MySqlDbType.LongText, 15, "column0002");
commandUpdate.Parameters.Add("@column0003", MySqlDbType.LongText, 15, "column0003");
commandUpdate.Parameters.Add("@column0004", MySqlDbType.LongText, 15, "column0004");
commandUpdate.Parameters.Add("@column0005", MySqlDbType.LongText, 15, "column0005");
commandUpdate.Parameters.Add("@column0006", MySqlDbType.LongText, 15, "column0006");
commandUpdate.Parameters.Add("@column0007", MySqlDbType.LongText, 15, "column0007");
commandUpdate.Parameters.Add("@column0008", MySqlDbType.LongText, 15, "column0008");
commandUpdate.Parameters.Add("@column0009", MySqlDbType.LongText, 15, "column0009");
commandUpdate.Parameters.Add("@column0010", MySqlDbType.LongText, 15, "column0010");
commandUpdate.Parameters.Add("@column0011", MySqlDbType.LongText, 15, "column0011");
commandUpdate.Parameters.Add("@column0012", MySqlDbType.LongText, 15, "column0012");
commandUpdate.Parameters.Add("@column0013", MySqlDbType.LongText, 15, "column0013");
commandUpdate.Parameters.Add("@column0014", MySqlDbType.LongText, 15, "column0014");
commandUpdate.Parameters.Add("@column0015", MySqlDbType.LongText, 15, "column0015");
commandUpdate.Parameters.Add("@column0016", MySqlDbType.LongText, 15, "column0016");
commandUpdate.Parameters.Add("@column0017", MySqlDbType.LongText, 15, "column0017");
commandUpdate.Parameters.Add("@column0018", MySqlDbType.LongText, 15, "column0018");
commandUpdate.Parameters.Add("@column0019", MySqlDbType.LongText, 15, "column0019");
commandUpdate.Parameters.Add("@column0020", MySqlDbType.LongText, 15, "column0020");
commandUpdate.Parameters.Add("@column0021", MySqlDbType.LongText, 15, "column0021");
commandUpdate.Parameters.Add("@column0022", MySqlDbType.LongText, 15, "column0022");
commandUpdate.Parameters.Add("@column0023", MySqlDbType.LongText, 15, "column0023");
commandUpdate.Parameters.Add("@column0024", MySqlDbType.LongText, 15, "column0024");
commandUpdate.Parameters.Add("@column0025", MySqlDbType.LongText, 15, "column0025");
commandUpdate.Parameters.Add("@column0026", MySqlDbType.LongText, 15, "column0026");
commandUpdate.Parameters.Add("@column0027", MySqlDbType.LongText, 15, "column0027");
commandUpdate.Parameters.Add("@column0028", MySqlDbType.LongText, 15, "column0028");
commandUpdate.Parameters.Add("@column0029", MySqlDbType.LongText, 15, "column0029");
commandUpdate.Parameters.Add("@column0030", MySqlDbType.LongText, 15, "column0030");
commandUpdate.Parameters.Add("@column0031", MySqlDbType.LongText, 15, "column0031");
commandUpdate.Parameters.Add("@column0032", MySqlDbType.LongText, 15, "column0032");
commandUpdate.Parameters.Add("@column0033", MySqlDbType.LongText, 15, "column0033");
commandUpdate.Parameters.Add("@column0034", MySqlDbType.LongText, 15, "column0034");
commandUpdate.Parameters.Add("@column0035", MySqlDbType.LongText, 15, "column0035");
commandUpdate.Parameters.Add("@column0036", MySqlDbType.LongText, 15, "column0036");
commandUpdate.Parameters.Add("@column0037", MySqlDbType.LongText, 15, "column0037");
commandUpdate.Parameters.Add("@column0038", MySqlDbType.LongText, 15, "column0038");
commandUpdate.Parameters.Add("@column0039", MySqlDbType.LongText, 15, "column0039");
commandUpdate.Parameters.Add("@column0040", MySqlDbType.LongText, 15, "column0040");
commandUpdate.Parameters.Add("@column0041", MySqlDbType.LongText, 15, "column0041");
commandUpdate.Parameters.Add("@column0042", MySqlDbType.LongText, 15, "column0042");
commandUpdate.Parameters.Add("@column0043", MySqlDbType.LongText, 15, "column0043");
commandUpdate.Parameters.Add("@column0044", MySqlDbType.LongText, 15, "column0044");
commandUpdate.Parameters.Add("@column0045", MySqlDbType.LongText, 15, "column0045");
commandUpdate.Parameters.Add("@column0046", MySqlDbType.LongText, 15, "column0046");
commandUpdate.Parameters.Add("@column0047", MySqlDbType.LongText, 15, "column0047");
commandUpdate.Parameters.Add("@column0048", MySqlDbType.LongText, 15, "column0048");
commandUpdate.Parameters.Add("@column0049", MySqlDbType.LongText, 15, "column0049");
commandUpdate.Parameters.Add("@column0050", MySqlDbType.LongText, 15, "column0050");
mySqlDataAdapter.InsertCommand = commandInsert;
mySqlDataAdapter.UpdateCommand = commandUpdate;
DataSet dataSetSender = new DataSet();
DataView dataViewSender = new DataView();
DataTable dataTableSender = new DataTable();
DataGridView dataGridViewReferer = new DataGridView();
dataGridViewReferer = this.Controls.Find(dataGridViewSender, true).FirstOrDefault() as DataGridView;
dataViewSender = (DataView)dataGridViewReferer.DataSource;
dataTableSender = dataViewSender.ToTable();
dataSetSender.Tables.Add(dataTableSender);
mySqlDataAdapter.Update(dataSetSender);
conn.Close();
conn.Dispose();
dataGridViewReferer.Update();
dataGridViewReferer.Refresh();
不幸的是,插入正在工作,而不是只插入一行,而是每次都插入所有 DataGridView 行(更新也执行相同的行为)。
正如一些注释,DataSet 名称是在 Form_Load 上创建的,其名称保存在实际数据库中。
这背后的目标是能够在运行时生成 DataGridView 并以相同的方式为它们分配 DataSet。
DataGridView 是通过单击按钮创建的:
ID = generateID();
dataGridView = new DataGridView();
dataGridView.Name = "dataGridView_" + loadedLogbook_filtered + "_" + ID;
dataGridView.Text = dataGridView.Name;
dataGridView.Location = new Point(8, 32);
dataGridView.Size = new Size(504, 504);
dataGridView.Visible = true;
dataGridView.ContextMenuStrip = contextMenuStrip_main;
dataGridView.MouseDown += new MouseEventHandler(control_MouseDown);
dataGridView.MouseUp += new MouseEventHandler(control_MouseUp);
dataGridView.MouseMove += new MouseEventHandler(control_MouseMove);
dataGridView.MouseClick += new MouseEventHandler(control_MouseClick);
dataGridView.CellValueChanged += new DataGridViewCellEventHandler(control_CellValueChanged);
this.Controls.Add(dataGridView);
ControlMoverOrResizer.Init(dataGridView);
我找不到问题的根源,我需要一点帮助。
有人可以就这个问题给我一些帮助吗?
感谢您的宝贵时间和帮助,非常感谢。
编辑:
这是我创建数据集的方式:
DataGridView dataGridViewReferer = this.Controls.Find(dataGridViewSender, true).FirstOrDefault() as DataGridView;
bool form_contextMenuStrip_main_dataSet_setbuttonDataSetSetClicked = false;
using (Form_contextMenuStrip_main_dataSet_set form_contextMenuStrip_main_dataSet_set = new Form_contextMenuStrip_main_dataSet_set())
{
form_contextMenuStrip_main_dataSet_set.ShowDialog(this);
form_contextMenuStrip_main_dataSet_setbuttonDataSetSetClicked = form_contextMenuStrip_main_dataSet_set.buttonDataSetSetClicked;
dataSetToSet = form_contextMenuStrip_main_dataSet_set.dataSetToSet;
if (form_contextMenuStrip_main_dataSet_setbuttonDataSetSetClicked == true)
{
dataSetToSetRefererer = new DataSet();
DataSet dataSetCaller = new DataSet();
conn = new MySqlConnection(connStr);
conn.Open();
mySqlDataAdapter = new MySqlDataAdapter();
command = new MySqlCommand(@"SELECT
*
FROM
item
WHERE
id_type = @param_0001 and friendly_name=@param_0002", conn);
command.Parameters.AddWithValue("@param_0001", 4);
command.Parameters.AddWithValue("@param_0002", dataSetToSet);
mySqlDataAdapter.SelectCommand = command;
mySqlDataAdapter.Fill(dataSetCaller);
conn.Close();
conn.Dispose();
string dataSetToFill = dataSetCaller.Tables[0].Rows[0][4].ToString();
conn = new MySqlConnection(connStr);
conn.Open();
mySqlDataAdapter = new MySqlDataAdapter();
command = new MySqlCommand(@"SELECT
*
FROM
item
WHERE
id_parent = @param_0001", conn);
command.Parameters.AddWithValue("@param_0001", dataSetCaller.Tables[0].Rows[0][0].ToString());
mySqlDataAdapter.SelectCommand = command;
mySqlDataAdapter.Fill(dataSetToSetRefererer);
conn.Close();
conn.Dispose();
dataGridViewReferer.DataSource = dataSetToSetRefererer.Tables[0].DefaultView;
}
}
【问题讨论】:
-
您的问题到底是什么? datagridview 有一个数据源,它可以是您的数据集,也可以是它的最后一个表,在分配您格式化视图(混合列重新格式化...)然后点网与数据库交互,然后您只更新数据适配器,至少我正在这样做。
-
问题是,每当我点击 DataGridView 并修改一个单元格,甚至插入一个新单元格时,如果 DataGridView 中有 10 行,它会将所有 10 行重新插入到数据库(即使在单元格更新时)。
-
正如我之前在评论中所说,尝试仅将 data.apdater 更新到作为 datagridview 数据源的显示表中。见dev.mysql.com/doc/connector-net/en/…
-
我最初尝试过:dataGridViewReferer = this.Controls.Find(dataGridViewSender, true).FirstOrDefault() as DataGridView; dataViewSender = (DataView)dataGridViewReferer.DataSource; dataTableSender = dataViewSender.Table; dataSetSender.Tables.Add(dataTableSender); mySqlDataAdapter.Update(dataSetSender); conn.Close(); conn.Dispose();这就是我得到的(错误):DataTable 已经属于另一个 DataSet
-
请尝试这种方法solibnis.blogspot.com/2013/02/… 并首先使用一个表,然后再添加第二个表。就像我经常在这里重复一样,编程就像写一个行动时间表。
标签: c# mysql .net database winforms