0

DataGridViewとComboBoxを備えたWinFormがあり、ユーザーが(データベースから)サブジェクトを選択できるようになっています。

  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();

しかし、3行目と1番目のセルの値を取得するようにコードが設定されているため、選択するサブジェクトが2つを超えると、機能しなくなることに気付きました。したがって、ユーザーが件名を変更した場合でも、出力値(w / cはTextBoxに表示されます)は同じままです。それらの値を取得する他の方法はありますか?助けてください、ありがとう。

4

3 に答える 3

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、あなたは正しい答えを得るために正しい質問をしなければなりません。

于 2012-07-19T22:56:15.557 に答える
0

私はあなたの疑問のいくつかを邪魔にならないようにしようとします:

データベースからこれらの値を取得する他の方法がわからないため、DataGridView を追加しました

DataSetデータベース値で満たされた、呼び出された「dsSched」が既にあります。いいえ、必要ありませんDataGridView。DataSet から直接必要なものを入力するだけです。

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

次に、3 行目と 1 番目のセルの値を取得するようにコードが設定されているため、選択するサブジェクトが 2 つ以上ある場合は機能しないことに気付きました。

そのコードの一部をどこで実行しているか ( )はわかりませんが、 のイベントでTextBox1.Text = Data...実行している場合は、ユーザーが選択した正確な行 (または何か) からデータを取得する必要があります。あなたがしようとしていることを理解していませんでした)。SelectedIndexChangedDataGridView

私が疑っていることの 1 つは、コードが次のような印象を受けていることです。

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

この方法でコンボボックスを追加できます

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 に答える