Announcement

Collapse
No announcement yet.

[help] liên kết 2 combobox

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C#] [help] liên kết 2 combobox

    Mình có form thế này, mình liên kết 2 combobox.
    Mình đã tạo 2 textbox để test thử thì nó chỉ truyền thì nó chỉ truyền đi Tên khóa học, còn Lop thì ko truyền đi gì cả.
    Mình muốn truyền đi Lop_ID và *******_ID
    Pro xem giúp mình với
    Code:
    private void frm_DiemTrungBinhToanKhoa_Load(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = KetNoi.str;
                con.Open();
                SqlCommand cmd = new SqlCommand();
                SqlCommand cmd1 = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM *******";
                SqlDataReader rd;
                rd = cmd.ExecuteReader();
                DataTable td = new DataTable();
                td.Load(rd);
                for (int i = 0; i < td.Rows.Count; i++)
                {
                    this.cbo*******.Items.Add(td.Rows[i][1]);
                }
    
                con.Close();
            }
    
            private void cbo*******_SelectedIndexChanged(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = KetNoi.str;
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                string Ten*******;
                Ten******* = cbo*******.SelectedItem.ToString();
                cmd.CommandText = "select* from ******* where Ten*******='" + Ten******* + "'";
                SqlDataReader rd;
                rd = cmd.ExecuteReader();
                DataTable td = new DataTable();
                td.Load(rd);
                string Ma******* = td.Rows[0][0].ToString();
                cmd.CommandText = "SELECT * FROM Lop WHERE ID_*******='" + Ma******* + "'";
                SqlDataReader rd1;
                rd1 = cmd.ExecuteReader();
                DataTable td1 = new DataTable();
                td1.Load(rd1);
                cboLop.DataSource = td1;
                cboLop.DisplayMember = "TenLop";
                cboLop.ValueMember = "Lop_ID";
                con.Close();
            }
    private void btnBaoCao_Click(object sender, EventArgs e)
            {
                frm_report_DiemTrungBinhToanKhoa frm = new  frm_report_DiemTrungBinhToanKhoa(cboLop.SelectedItem.ToString(),cbo*******.SelectedItem.ToString());
               
                   frm.Show();
            }

  • #2
    Originally posted by adam View Post
    Mình có form thế này, mình liên kết 2 combobox.
    Mình đã tạo 2 textbox để test thử thì nó chỉ truyền thì nó chỉ truyền đi Tên khóa học, còn Lop thì ko truyền đi gì cả.
    Mình muốn truyền đi Lop_ID và *******_ID
    Pro xem giúp mình với
    Code:
    private void frm_DiemTrungBinhToanKhoa_Load(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = KetNoi.str;
                con.Open();
                SqlCommand cmd = new SqlCommand();
                SqlCommand cmd1 = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM *******";
                SqlDataReader rd;
                rd = cmd.ExecuteReader();
                DataTable td = new DataTable();
                td.Load(rd);
                for (int i = 0; i < td.Rows.Count; i++)
                {
                    this.cbo*******.Items.Add(td.Rows[i][1]);
                }
    
                con.Close();
            }
    
            private void cbo*******_SelectedIndexChanged(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = KetNoi.str;
                con.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                string Ten*******;
                Ten******* = cbo*******.SelectedItem.ToString();
                cmd.CommandText = "select* from ******* where Ten*******='" + Ten******* + "'";
                SqlDataReader rd;
                rd = cmd.ExecuteReader();
                DataTable td = new DataTable();
                td.Load(rd);
                string Ma******* = td.Rows[0][0].ToString();
                cmd.CommandText = "SELECT * FROM Lop WHERE ID_*******='" + Ma******* + "'";
                SqlDataReader rd1;
                rd1 = cmd.ExecuteReader();
                DataTable td1 = new DataTable();
                td1.Load(rd1);
                cboLop.DataSource = td1;
                cboLop.DisplayMember = "TenLop";
                cboLop.ValueMember = "Lop_ID";
                con.Close();
            }
    private void btnBaoCao_Click(object sender, EventArgs e)
            {
                frm_report_DiemTrungBinhToanKhoa frm = new  frm_report_DiemTrungBinhToanKhoa(cboLop.SelectedItem.ToString(),cbo*******.SelectedItem.ToString());
               
                   frm.Show();
            }
    Mình không hiểu ý bạn nói lắm nhưng theo mình thì như thế này
    Bạn nên viết lớp liên kết database theo quy tắc mô hình 3 tầng , bạn viết các phương thức liên kết , (Thao tác thực thi dữ liệu) Execute_Non_Query , (Truy xuất dữ liệu) Execute_Reader trong 1 class riêng . Khi form nào cần liên kết database thì using nó lên . Như vậy mình đỡ phải viết dài dòng và kém hiệu quả :sure:
    SqlDataReader rd;
    rd = cmd.ExecuteReader();
    DataTable td = new DataTable();
    td.Load(rd);
    for (int i = 0; i < td.Rows.Count; i++)
    {
    this.cbo*******.Items.Add(td.Rows[i][1]);
    }
    Cách load dữ liệu từ datatable thông qua sqldatareader thì mình chưa thử nên cũng k biết , nhưng cách của mình là load dữ liệu hẳn từ sqldatareader luôn .
    Có 1 phương thức kiểm tra là hasRows = true nếu có record trong đó , nếu có dữ liệu thì load lên bằng
    while(rd.Read()) // nếu còn dữ liệu sẽ tiếp tục thực thi
    {
    this.cbo*******.Items.Add(rd[0].ToString());
    }
    À quên , bạn cũng nên chú ý đến nếu database của bạn có tiếng việt nhé , thêm chứ N vào trước . ( WHERE Tên=N' ') thì nó mới ra kết quả đúng

    Nếu được , bạn đưa project cho mình để mình xem sao :byebye:

    Comment


    • #3
      Originally posted by 11520235 View Post
      À quên , bạn cũng nên chú ý đến nếu database của bạn có tiếng việt nhé , thêm chứ N vào trước . ( WHERE Tên=N' ') thì nó mới ra kết quả đúng
      Câu này chuẩn cực kỳ, thanks bạn nhiều lắm

      Bài mình đã sửa được rồi bạn ạ, mình không làm được theo mô hình 3 tầng nên mới phải làm như thế

      bạn có project về quản lý như: Sinh viên, điểm.... thì cho mình xin để mình tham khảo nhé , mail mình : truonggiang_tong@yahoo.com

      Một lần nữa cảm ơn bạn

      Comment

      LHQC

      Collapse
      Working...
      X