0

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

4

3 回答 3

0

我将尝试消除您的一些疑问:

我添加了 DataGridView 因为我不知道如何从数据库中获取这些值

您已经有一个DataSet名为“dsSched”的数据库值填充。所以,不,你不需要DataGridView. 只需直接从数据集中填写您想要的任何内容:

string data = dsSched.Tables["Schedules"].Rows[3].Cells[1].Value.ToString();

然后我意识到如果有超过 2 个主题可供选择,它将不再起作用,因为代码设置为获取第 3 行和第 1 个单元格的值。

好吧,我不确定您在哪里运行那段代码 ( TextBox1.Text = Data...),但是如果SelectedIndexChangedDataGridView在不明白你要做什么)。

我怀疑的一件事是您的印象是代码:

TextBox1.Text = DataGridView1.Rows[3].Cells[1].Value.ToString();

...将文本框绑定到行/单元格中的值。这不是它的工作原理 - 运行代码时检索一次该值,然后在再次运行代码时再次检索该值。因此,您应该确保在必须获取此值时运行代码。


编辑:

我的意思是,我如何获得价值?比如,PrimaryKey 之类的?

这就是问题所在!对不起,我可能走偏了。只需将 设置为[ValueMember][1]描述数据集值列的字符串。

cbxSubject.ValueMember = "日程 ID";

比您使用 访问它[SelectedValue][2],例如:

int selValue = (int)(cbxSubject.SelectedValue);
于 2012-07-19T22:38:05.230 回答
0

我建议你不要使用常量。而不是使用 3 和 1,您需要编写一些代码来查找用户选择的内容RC它应该是事件驱动的,您需要在更改时重新设置文本框。我假设您正在使用 on-change 事件,但您实际上还没有向我们提供该信息。

这是一些伪代码,可以帮助我了解我的去向

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

于 2012-07-19T22:56:15.557 回答
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);
于 2012-07-19T22:29:21.203 回答