我有一个WinForm,它有一个DataGridView和一个ComboBox,允许用户选择一个主题(来自数据库)。
cbxSubject.DataSource = dsSched.Tables["Schedules"]; cbxSubject.DisplayMember = "Subject"; ...
DataGridView看起来像这样:http://i45.tinypic.com/18gmmu.png我添加了DataGridView,因为我不知道如何从数据库中获取这些值。我使用了类似的代码来获取值:
TextBox1.Text = DataGridView1.Rows [3] .Cells [1] .Value.ToString();
但后来我意识到,如果有超过2个主题可供选择,它将不再起作用,因为代码设置为获取第3行和第1个单元格的值。因此,即使用户更改主题,输出值(w / c随后显示在TextBox中)仍将是相同的。有没有其他方法可以获得这些价值观?请帮助,谢谢。
答案 0 :(得分:0)
您可以通过这种方式添加组合框
DataGridViewComboBoxColumn subjectsCombo = new DataGridViewComboBoxColumn();
subjectsCombo.DataPropertyName = "SubjectID";
subjectsCombo.HeaderText = "Subjects";
subjectsCombo.DataSource = dsSched.Tables["Subjects"];
subjectsCombo.ValueMember = "SubjectID";
subjectsCombo.DisplayMember = "SubjectText";
cbxSubject.Columns.Add(subjectsCombo);
答案 1 :(得分:0)
我会试着解开你的一些疑虑:
我添加了DataGridView,因为我不知道如何获取其他任何方式 来自数据库的那些值
您已经有一个名为“dsSched”的DataSet
填充了数据库值。所以,不,你不需要DataGridView
。只需从DataSet直接填写您想要的内容:
string data = dsSched.Tables["Schedules"].Rows[3].Cells[1].Value.ToString();
然后我意识到,如果有更多,它将不再起作用 2个主题可供选择,因为代码设置为获取值 第3行和第1个单元格。
好吧,我不确定哪里你正在运行那段代码(TextBox1.Text = Data...
),但如果你在SelectedIndexChanged
事件的DataGridView
事件上运行它{1}},那么你应该从用户选择的确切行中获取数据(或者某些东西,再次,我不明白你想要做什么)。
我怀疑的一件事是你的印象是代码:
TextBox1.Text = DataGridView1.Rows[3].Cells[1].Value.ToString();
...将文本框绑定到行/单元格中的值。这不是它的工作原理 - 在代码运行时检索一次值,然后在代码再次运行时再次检索。因此,您必须确保在必须获取此值时运行代码。
修改强>
我的意思是,我如何获得价值?比如,PrimaryKey还是什么?
这就是问题!对不起,我可能在偏离。只需将[ValueMember][1]
设置为描述数据集的值列的字符串。
cbxSubject.ValueMember =“Schedule ID”;
比使用[SelectedValue][2]
访问它,例如:
int selValue = (int)(cbxSubject.SelectedValue);
答案 2 :(得分:0)
我建议你不要使用常量。而不是使用3和1,您需要编写一些代码来从用户选择的内容中查找R
和C
。它应该是事件驱动的,您需要在更改时重新设置文本框。我假设你正在使用一个改变活动,但你还没有真正给我们这些信息。
这里有一些伪代码可以用这个
来实现public DataGridView1_SelectionChanged(object sender, ChangedEventArgs e)
{//this might not be the right event, I'll leave it up to you to do your own homework
int R = //Get the current Selected Row;
int C = //Get the current Selected Cell/column;
TextBox1.Text = dsSched.Tables["Schedules"].Rows[R].Cells[C];
///OR YOU COULD DO SOMETHING LIKE THIS
TextBox1.Text = ((DataGridView)sender).SelectedRows[0].Cells[1].Value;
}
//Please note, this is only pseudocode, I dont like doing peoples homework for them.
这应该为您提供您需要的更通用的想法/算法。请记住,这甚至可能不是这样做的最佳方式,但我建议仅根据迄今为止提供给我们的信息。顺便问一下,你有什么尝试?并且你能给我们一些更大的代码示例,可能会有一个更简单的错误,你没有向我们展示,所以我们无法告诉你: - )
考虑到你还没有真正问过正确的问题,因为我们不知道为什么你要做你所说的你正在做的事情,我不能比这更具体。 GIGO,你必须提出正确的问题才能得到正确的答案。