1

StudentID と StudentName をデータベースに更新しました。

これらの次のコードを使用してテキストボックスの値を確認しますが、行を選択する場合は、StudentID ではなく ID 行にする必要があります。

ID行ではなく、StudentIDで値を確認したいということです。

ID 行を使用して StudentName を表示したくありません。

StudentID を入力したときに StudentName が表示されるようにします。

sql = new SqlConnection(@"Data Source=PC-PC\PC;Initial Catalog=Test;Integrated Security=True");
adapter = new SqlDataAdapter("select * from Entry",sql);
dt = new DataTable();
adapter.Fill(dt);
textBox1.Text = dt.Rows[3]["StudentName"].ToString();
4

4 に答える 4

1

学生のセットを検索する場合は、名前のリストを表示します

選択を取得したら、選択した行のIDを取得します...

ComboBox/ListBox を使用する必要があります

  1. DataSource を DataTable に設定します
  2. ValueMember を「rowID」に設定します
  3. set DisplayMember = "StudentName"

今、あなたは次のようなリストを持っています

-Tomer Weinberg
-aliprogrammer
-some freek

myComboBox.SelectedValueをクエリすると 、その学生の ID を取得するか、何も選択されていない場合は NULL を取得します。

編集

画面キャプチャ

これをラベルとリストボックス(コンボボックスにすることができます)を持つフォームの中に入れます

    private DataTable dataTable1;
    public Form1()
    {
        InitializeComponent();

        dataTable1 = new DataTable("myTable");
        dataTable1.Columns.Add("id", typeof (int));
        dataTable1.Columns.Add("name", typeof(string));

        dataTable1.Rows.Add(1, "Tomer");
        dataTable1.Rows.Add(2, "Ali");
        dataTable1.Rows.Add(3, "Some Other");

        listBox1.SelectedValueChanged += new EventHandler(listBox1_SelectedValueChanged);

        listBox1.DataSource = dataTable1; // collection of Rows
        listBox1.ValueMember = "id"; // what is the value of the row.
        listBox1.DisplayMember = "name"; // what should be visible to user
        listBox1.Refresh();
    }

    void listBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        label1.Text = string.Format("Selected: {0}", listBox1.SelectedValue);
    }

幸運を祈ります

于 2012-05-02T14:23:48.777 に答える
1

StudentID がテーブルの主キーである場合は、次を使用します。

DataRow row = dt.Rows.Find(studentID);
if (row != null)
    textBox1.Text = row["StudentName"].ToString();

それ以外の場合は、dt.Selectメソッドを使用します。ところで、データ アクセス コードと UI コードを混在させるのはあまり良い考えではありません

更新:LINQも使用できます

string name = (from row in dt.AsEnumerable()
              where row.Field<int>("StudentID") == studentID
              select row.Field<string>("StudenName"))
              .Single();

更新: 学生 ID を入力していて、学生の名前を取得したい場合は、データベースから学生の名前を取得して、パラメーターを sql コマンドに渡すことができます。

private string GetStudentName(int studentID)
{
    string connString = @"Data Source=PC-PC\PC;Initial Catalog=Test;Integrated Security=True";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        string query = "SELECT StudentName FROM Entry WHERE StudentID = @studentID";
        SqlCommand cmd = new SqlCommand(query, conn);
        cmd.Parameters.Add("@studentID", SqlDbType.Int).Value = studentID;
        conn.Open();
        return (string)cmd.ExecuteScalar();
    }
}

最初のエントリのみを返し (StudentID が PK でない場合)、DbNull を検証することも検討してください。

更新:学生のいくつかの属性を取得する必要がある場合は、クラス Student を作成しました。

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Grade { get; set; }
}

データリーダーからそのプロパティを入力しました:

private Student GetStudent(int studentID)
{
    string connString = @"Data Source=PC-PC\PC;Initial Catalog=Test;Integrated Security=True";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        string query = "SELECT * FROM Entry WHERE StudentID = @studentID";
        SqlCommand cmd = new SqlCommand(query, conn);
        cmd.Parameters.Add("@studentID", SqlDbType.Int).Value = studentID;
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();

        if (!reader.Read())
             throw new Exception("Student not found");

        return new Student()
        {
            Id = (int)reader["StudentID"],
            Name = (string)reader["StudentName"],
            Grade = (string)reader["Grade"]
        };
    }
}

次に、テキスト ボックスに学生 ID を入力すると、データベースから学生を取得し、そのプロパティをコントロールに表示します。

int studentID = Int32.Parse(idTextBox.Text);
Student student = GetStudent(studentID);
nameTextBox.Text = student.Name;
gradeTextBox.Text = student.Grade;
于 2012-05-02T14:20:55.607 に答える
1

私の古い投稿へのコメントに続いて、これはダイアログボックスの例です

public class MySearchForm
{
public string SelectedSID { get; private set;}
// code to show a list of Students and StudentsIDs.
}

public class myMainForm
{
    public void SearchButton_Click(object sender, EventArgs ea)
    {
        using(MySearchForm searchForm = new MySearchForm())
        {
            if(DialogResult.OK == searchForm.ShowDialog())
            {
                 mySutdentIDTextBox.Text = searchForm.SelectedSID;
            }
        }
    }
}

ShowDialog() を呼び出す前に、コンストラクターを使用してパラメーターを設定し、ダイアログ ボックスをカスタマイズできます。

ダイアログから取得する情報を追加できます...

実際、これは OpenFileDialog フォームを使用するようなものです。ユーザーが選択したファイルを取得するには

幸運を祈ります。

于 2012-05-05T09:56:19.797 に答える
0

DataTable.Select メソッドを使用することもできます。フィルター式を渡すことができます。DataRow 配列を返します

DataRow [] rowCollection= dt.Select("StudentID=" + <From Some Control> or method argument)

ここにリンクがあります http://msdn.microsoft.com/en-us/library/det4aw50.aspx

Select は次のように使用できます。

DataTable dt = new DataTable("Test");
            dt.Columns.Add("ID") ;
            dt.Columns.Add("StudentID");
            dt.Columns.Add("StudentName");

            object[] rowVals = new object[3];
            rowVals[0] = "1";
            rowVals[1] = "ST-1";
            rowVals[2] = "Kunal Uppal";

            dt.Rows.Add(rowVals);
            string studentID = "ST-1"; //this can come from a textbox.Text property
            DataRow[] collection= dt.Select("StudentID=" + "'" + studentID + "'");
            string studentName = Convert.ToString(collection[0]["StudentName"]);
于 2012-05-02T14:29:08.737 に答える