none
C# Combobox 와 GridView 질문입니다 RRS feed

  • 질문

  • 데이터베이스에  밑에 처럼 등록되어 있습니다.    일단 MySQL로 밑의 데이터를 끄집어낸다음 리스트로 만들어  Combobox에 데이터 바인딩을 해서 표시하는부분까지 문제없이 잘되고 있습니다 (참고로 Combobox에는 NAME만 표시하게 했습니다)   

     

    ※할려고 하는것
    1.  예를들어 Combobox에서 ParkJiSung을 선택했을때 Gridview에  ParkJiSung의 ID와 NAME과 AGE와 TEAM을 나타나게 하고싶습니다.  그리고 Combobox의 값이 ParkJiSung 에서 LeeChungYong으로 바뀌었을땐 Gridview에 표시되어있는 ParikJiSung의 정보가 사라지고 LeeChungYong의 정보가 표시되로록 하고싶습니다.

    어떻게 해야할지 감이 안집히네요... 지도 부탁드리겠습니다. (_ _)      

    ID            NAME          AGE            TEAM
    -------------------------------------------------

    1         ParkJiSung        32                PSV

    2         KiSungYong       24            Sunderland
    3         LeeChungYong   25               Bolton 


    • 편집됨 뺑코 2013년 11월 10일 일요일 오전 3:37
    2013년 11월 10일 일요일 오전 3:36

답변

  • 방법은 여러가지가 있을 수 있겠네요.

    일단 DB를 한번만 갔다온다고 가정하고 아래와 같이 하면 어떨까요?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            DataTable gUsers = null;
    
            public Form1()
            {
                InitializeComponent();
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
                dataGridView1.AllowUserToAddRows = false; //BlankRow안생기도록
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                gUsers = SelectUsers();
    
                comboBox1.DisplayMember = "NAME";
                comboBox1.ValueMember = "ID";
                comboBox1.DataSource = gUsers.Copy();
            }
    
            private DataTable SelectUsers()
            {
                //실제로는 데이터베이스에서 읽어온다.
                DataTable resultDT = new DataTable();
                resultDT.Columns.Add("ID", typeof(string));
                resultDT.Columns.Add("NAME", typeof(string));
                resultDT.Columns.Add("AGE", typeof(string));
                resultDT.Columns.Add("TEAM", typeof(string));
    
                DataRow dr = resultDT.NewRow();
                dr["ID"] = "1";
                dr["NAME"] = "ParkJiSung";
                dr["AGE"] = "32";
                dr["TEAM"] = "PSV";
                resultDT.Rows.Add(dr);
    
                dr = resultDT.NewRow();
                dr["ID"] = "2";
                dr["NAME"] = "KiSungYong";
                dr["AGE"] = "24";
                dr["TEAM"] = "Sunderlang";
                resultDT.Rows.Add(dr);
    
                dr = resultDT.NewRow();
                dr["ID"] = "3";
                dr["NAME"] = "LeeChungYong";
                dr["AGE"] = "25";
                dr["TEAM"] = "Bolton";
                resultDT.Rows.Add(dr);
    
                return resultDT;
            }
    
            private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
            {
                for(int r=0;r<dataGridView1.Rows.Count;r++)
                    dataGridView1.Rows.RemoveAt(r);
    
                DataRow[] arDR = gUsers.Select("ID='"+comboBox1.SelectedValue+"'");
                if (arDR.Length > 0)
                {
                    DataSet tmpDS = new DataSet();
                    tmpDS.Merge(arDR);
                    dataGridView1.DataSource = tmpDS.Tables[0].DefaultView;
                }
            }
        }
    }
    

    SelectUsers()는 실제로는 MySQL에서 읽어오는거라고 생각하시면 됩니다.

    그럼 좋은 하루 되세요.

    2013년 11월 14일 목요일 오전 12:31