【发布时间】:2021-09-13 08:18:33
【问题描述】:
我有这个数据网格,其中 Combobox 是从 Db 填充的。
我想要实现的是,当我在“Esercizio”列中选择某些内容时,“视频”列的单元格会自动填充 Db 的“link_video”列中的相应值。
所以如果我选择“回扣”,我需要在文本框单元格中看到来自 db 的回扣的链接视频。
这是我用来在表单加载时填充组合框的代码:
private void Myform_Load(object sender, EventArgs e) {
con = new SqlConnection("Data Source=(LocalDB)\\etc");
cmd = new SqlCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Esercizi";
dr = cmd.ExecuteReader();
while (dr.Read())
{
//populate Column1 combobox with "nome" column from Esercizi db table
Column1.Items.Add(dr["nome"]);
}
con.Close();
}
编辑 我发现了 2 个新问题。
我正在尝试从 db 加载已保存的锻炼,但是当我这样做时,没有视频链接填充 dgv,因为网格事件不会触发。
我尝试的是向一个新的 selectionindexchanged 函数添加一个 foreach 循环,并在加载按钮代码的末尾触发它,如下所示:
private void curCombo_LoadedValues(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
if (curCombo != null && curCombo.SelectedValue != null)
{
ExerciseAndVideo selectedExercise = (ExerciseAndVideo)curCombo.SelectedItem;
dataGridView1.CurrentRow.Cells["Video"].Value = selectedExercise.Video;
}
}
}
}
private void button9_Click(object sender, EventArgs e){
string connectionString = "Data Source=(LocalDB)\\etc";
string sql = "SELECT * FROM Schede WHERE Id = 6 AND dgv = 'dataGridView1'";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);using (DataTable dt = new DataTable())
{
dataadapter.Fill(dt);
//Set AutoGenerateColumns False
dataGridView1.AutoGenerateColumns = false;
//Set Columns Count
dataGridView1.ColumnCount = 6;
//Add Columns
dataGridView1.Columns[0].Name = "Esercizio";
dataGridView1.Columns[0].HeaderText = "Esercizio";
dataGridView1.Columns[0].DataPropertyName = "Esercizio";
dataGridView1.Columns[1].Name = "Serie";
dataGridView1.Columns[1].HeaderText = "Serie";
dataGridView1.Columns[1].DataPropertyName = "Serie";
dataGridView1.Columns[2].HeaderText = "Ripetizioni";
dataGridView1.Columns[2].Name = "Ripetizioni";
dataGridView1.Columns[2].DataPropertyName = "Ripetizioni";
dataGridView1.Columns[3].Name = "Recupero";
dataGridView1.Columns[3].HeaderText = "Recupero";
dataGridView1.Columns[3].DataPropertyName = "Recupero";
dataGridView1.Columns[4].Name = "Time Under Tension";
dataGridView1.Columns[4].HeaderText = "Time Under Tension";
dataGridView1.Columns[4].DataPropertyName = "Time_Under_Tension";
dataGridView1.DataSource = dt;
connection.Close();
}
curCombo_LoadedValues();
}
但我收到此错误“强制参数发送者没有参数...
如何正确调用?
第二个问题是,当我像这样填充一些 dgv 列时,组合停止正常工作,并且组合框出现错误异常:
dataGridView1.Rows.Add(7);
Random rnd = new Random();
dataGridView1.Rows[0].Cells[1].Value = 3;
dataGridView1.Rows[0].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[0].Cells[3].Value = 1;
dataGridView1.Rows[0].Cells[4].Value = 201;
dataGridView1.Rows[1].Cells[1].Value = 2;
dataGridView1.Rows[1].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[1].Cells[3].Value = 1;
dataGridView1.Rows[1].Cells[4].Value = 201;
dataGridView1.Rows[2].Cells[1].Value = 3;
dataGridView1.Rows[2].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[2].Cells[3].Value = 1;
dataGridView1.Rows[2].Cells[4].Value = 201;
dataGridView1.Rows[3].Cells[1].Value = 4;
dataGridView1.Rows[3].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[3].Cells[3].Value = 1;
dataGridView1.Rows[3].Cells[4].Value = 201;
dataGridView1.Rows[4].Cells[1].Value = 5;
dataGridView1.Rows[4].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[4].Cells[3].Value = 1;
dataGridView1.Rows[4].Cells[4].Value = 201;
dataGridView1.Rows[5].Cells[1].Value = 6;
dataGridView1.Rows[5].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[5].Cells[3].Value = 1;
dataGridView1.Rows[5].Cells[4].Value = 201;
dataGridView1.Rows[6].Cells[1].Value = 7;
dataGridView1.Rows[6].Cells[2].Value = rnd.Next(1, 13);
dataGridView1.Rows[6].Cells[3].Value = 1;
dataGridView1.Rows[6].Cells[4].Value = 201;
这是 dgv 现在的样子: dgv
这是连击停止正常工作后我得到的错误(我单击并没有出现下拉菜单,或者如果我单击 2-3 次,则选择了一个随机项目,但另一列中没有出现视频链接):
【问题讨论】:
-
也许用两列数据填充组合框。 ComboBox 具有属性 DisplayMember 和 ValueMember。然后您可以将 selectedValue 复制到另一列。
-
@benuto 所以,你建议在显示成员中用“nome”填充组合框,在值成员中用“link_video”填充,然后我可以用值成员的链接视频填充文本框吗?我是 C# 的新手。你能告诉我怎么做吗?
-
查找有关
ComboBox.DataSource和onChange事件的信息,这是一个相当简单的话题 -
@benuto 我正在搜索大约 3 天,但我无法解决它
-
1.在数据库中查询名称和视频链接,将它们存储在列表中(例如) 2. 将列表分配给 combo.datasource 3 设置组合成员 4. 将方法添加到 onSelectedValueChanged 5. 瞧!
标签: c# datagridview datagridviewcomboboxcell