从数据库获取值到文本框

时间:2012-07-19 22:10:51

标签: c# database winforms textbox

我有一个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中)仍将是相同的。有没有其他方法可以获得这些价值观?请帮助,谢谢。

3 个答案:

答案 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,您需要编写一些代码来从用户选择的内容中查找RC。它应该是事件驱动的,您需要在更改时重新设置文本框。我假设你正在使用一个改变活动,但你还没有真正给我们这些信息。

这里有一些伪代码可以用这个

来实现
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,你必须提出正确的问题才能得到正确的答案。