본문 바로가기

C# 개인 공부 기록용/개인 실습

DataGridView + Selected (Cell, Row)

TABLE

CREATE TABLE USER_TEST(
USER_IDX NUMBER NOT NULL PRIMARY KEY,
USER_NAME VARCHAR2(18),
USER_BIRTHDAY VARCHAR2(10),
USER_GENDER VARCHAR2(10),
USER_AGE NUMBER,
USER_CELLPHONE VARCHAR2(11),
USER_ADDR VARCHAR2(81)
);

CREATE SEQUENCE USER_IDX

 

XML CLASS

<?xml version="1.0" encoding="utf-8" ?>
<Oracle_Information>
	<Ip_address>아이피 주소</Ip_address>
	<Service>서비스</Service>
	<Id>아이디</Id>
	<Password>패스워드</Password>
</Oracle_Information>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.DataAccess.Client; // Oracle
using System.Xml; // Xml
using System.Windows.Forms; //Winform

namespace DataGridView_STUDY
{
    class O_xml_class
    {
        private string IP_ADDRESS;
        private string SERVICE;
        private string ID;
        private string PASSWORD;

        public void Oi_xml_fn()
        {
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                string url = Application.StartupPath + @"\OI_XML_FILE.xml"; // bin\Debug
                xmldoc.Load(url);

                XmlNodeList xmlnl = xmldoc.SelectNodes("Oracle_Information");

                foreach (XmlNode xn in xmlnl)
                {
                    IP_ADDRESS = xn["Ip_address"].InnerText;
                    SERVICE = xn["Service"].InnerText;
                    ID = xn["Id"].InnerText;
                    PASSWORD = xn["Password"].InnerText;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Xml Error");
            }
        }
        // IP_ADDRESS
        public string ip_address_xml
        {
            get { return IP_ADDRESS; }
            set { IP_ADDRESS = value; }
        }

        // SERVICE
        public string service_xml
        {
            get { return SERVICE; }
            set { SERVICE = value; }
        }

        // ID
        public string id_xml
        {
            get { return ID; }
            set { ID = value; }
        }

        // PASSWORD
        public string pw_xml
        {
            get { return PASSWORD; }
            set { PASSWORD = value; }
        }
    }
}

 

ORACLE CLASS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using Oracle.DataAccess.Client; // Oracle
using System.Windows.Forms; // Winform


namespace DataGridView_STUDY
{
    class O_class
    {
        private O_xml_class oxc = new O_xml_class();
        private OracleConnection conn;

        private string ip;
        private string service;
        private string id;
        private string pw;

        public void Oi_conn()
        {
            try
            {
                oxc.Oi_xml_fn();
                ip = oxc.ip_address_xml;
                service = oxc.service_xml;
                id = oxc.id_xml;
                pw = oxc.pw_xml;

                String connstr = "data source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = " + ip + ")" +
                    "(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = " + service + ")));USER ID=" + id + ";PASSWORD=" + pw + ";";

                conn = new OracleConnection(connstr);
                conn.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Oracle Error");
            }
        }

        public OracleConnection oconn
        {
            get { return conn; }
            set { conn = value; }
        }
    }
}

 

DataGridView Form

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;
using Oracle.DataAccess.Client; // Oracle

namespace DataGridView_STUDY
{
    public partial class DataGridView_STUDY : Form
    {
        private O_class oc = new O_class();
        private OracleCommand cmd;
        private OracleDataReader reader;
        private DataSet ds;
        private OracleDataAdapter oda;

        private int row_num;
        private string value_idx;
        private string value_name;

        private string sq = string.Empty;
        private string cb = string.Empty;

        public DataGridView_STUDY()
        {
            InitializeComponent();
        }

        private void BTN_UPDATE_Click(object sender, EventArgs e)
        {
            try
            {
                // DataGridView 값 가져오기
                row_num = DGV.CurrentCell.RowIndex;
                value_idx = DGV.Rows[row_num].Cells[0].Value.ToString();
                value_name = DGV.Rows[row_num].Cells[1].Value.ToString();

                this.Visible = false; // 현재 폼 안보이게 하기
                UPDATE_FORM frm = new UPDATE_FORM(); // 새 폼 생성

                frm.nidx = value_idx; // IDX 값 넘기기
                
                frm.Owner = this; // 새 폼의 오너를 현재 폼으로
                frm.Show(); // 새폼 보여주기
            }
            catch (Exception ex)
            {
                MessageBox.Show("UPDATE Error");
            }
        }

        private int Frm_event_handler(string value_idx)
        {
            throw new NotImplementedException();
        }

        private void BTN_DELETE_Click(object sender, EventArgs e)
        {
            try
            {
                // DataGridView 값 가져오기
                row_num = DGV.CurrentCell.RowIndex;
                value_idx = DGV.Rows[row_num].Cells[0].Value.ToString();
                value_name = DGV.Rows[row_num].Cells[1].Value.ToString();

                // if (MessageBox.Show("MessageBox 내용", "MessageBox 제목", MessageBoxButtons.YesNo) == DialogResult.Yes)
                if (MessageBox.Show("IDX : " + this.value_idx + "\nNAME : " + this.value_name + "\n\n삭제하시겠습니까?", "DELETE BUTTON", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    oc.Oi_conn();

                    sq = "DELETE USER_TEST WHERE USER_IDX = " + value_idx + "";

                    cmd = new OracleCommand(sq, oc.oconn);
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("삭제되었습니다");

                    DataGridView_STUDY_Load(null, null); // 로드를 다시 불러옴 (새로고침 느낌) || 메소드 만들기

                    oc.oconn.Close();
                }
            }
            catch
            {
                MessageBox.Show("DELETE Error");
            }
        }

        private void DataGridView_STUDY_Load(object sender, EventArgs e)
        {
            try
            {
                oc.Oi_conn();

                sq = "SELECT * FROM USER_TEST ORDER BY USER_IDX ASC";

                cmd = new OracleCommand(sq, oc.oconn);
                cmd.ExecuteReader();

                ds = new DataSet();

                oda = new OracleDataAdapter(sq, oc.oconn);
                oda.Fill(ds);

                DGV.DataSource = ds.Tables[0];

                oc.oconn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Load Error");
            }
        }

        private void BTN_SEARCH_Click(object sender, EventArgs e)
        {
            try
            {
                if (CB_C.Text == string.Empty)
                {
                    MessageBox.Show("콤보 박스에서 검색할 종류를 선택해주세요");
                    return;
                }

                cb = CB_C.SelectedItem.ToString();

                if (TB_SEARCH.Text == string.Empty)
                {
                    MessageBox.Show("빈칸에 찾으실 내용을 입력해주세요");
                    return;
                }

                switch (cb)
                {
                    case "IDX":
                        cb = "USER_IDX";
                        break;

                    case "이름":
                        cb = "USER_NAME";
                        break;

                    case "생년월일":
                        cb = "USER_BIRTHDAY";
                        break;

                    case "성별":
                        cb = "USER_GENDER";
                        break;

                    case "나이":
                        cb = "USER_AGE";
                        break;

                    case "휴대폰":
                        cb = "USER_CELLPHONE";
                        break;

                    case "주소":
                        cb = "USER_ADDR";
                        break;
                }

                oc.Oi_conn();

                sq = "SELECT * FROM USER_TEST WHERE " + cb + " LIKE '%" + TB_SEARCH.Text + "%'";

                cmd = new OracleCommand(sq, oc.oconn);
                reader = cmd.ExecuteReader();

                if (reader.Read() == false)
                {
                    MessageBox.Show("Data does not exist");
                    return;
                }

                ds = new DataSet();

                oda = new OracleDataAdapter(sq, oc.oconn);
                oda.Fill(ds);

                DGV.DataSource = ds.Tables[0];

                oc.oconn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Search Error");
            }
        }

        private void BTN_ASC_Click(object sender, EventArgs e)
        {
            try
            {
                oc.Oi_conn();

                sq = "SELECT * FROM USER_TEST ORDER BY USER_IDX ASC";

                cmd = new OracleCommand(sq, oc.oconn);
                cmd.ExecuteReader();

                ds = new DataSet();

                oda = new OracleDataAdapter(sq, oc.oconn);
                oda.Fill(ds);

                DGV.DataSource = ds.Tables[0];

                oc.oconn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Load Error");
            }
        }

        private void BTN_DESC_Click(object sender, EventArgs e)
        {
            try
            {
                oc.Oi_conn();

                sq = "SELECT * FROM USER_TEST ORDER BY USER_IDX DESC";

                cmd = new OracleCommand(sq, oc.oconn);
                cmd.ExecuteReader();

                ds = new DataSet();

                oda = new OracleDataAdapter(sq, oc.oconn);
                oda.Fill(ds);

                DGV.DataSource = ds.Tables[0];

                oc.oconn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Load Error");
            }
        }

        private void BTN_INSERT_Click(object sender, EventArgs e)
        {
            this.Visible = false; // 현재 폼 안보이게 하기
            INSERT_FORM frm = new INSERT_FORM(); // 새 폼 생성
            frm.Owner = this; // 새 폼의 오너를 현재 폼으로
            frm.Show(); // 새폼 보여주기
        }
    }
}

 

실행 시 Form Load를 통해 DataGridView에 DB를 뿌려준다.

 

SELECT * FROM USER_TEST WHERE " + ComboBox(성별) + " LIKE '%" + TextBox(여자) + "%'";

 

ASC(오름차순)

 

DESC(내림차순)


UPDATE

 private void BTN_UPDATE_Click(object sender, EventArgs e)
        {
            try
            {
                // DataGridView 값 가져오기
                row_num = DGV.CurrentCell.RowIndex; // row_num = 7 // 0:Start
                value_idx = DGV.Rows[row_num].Cells[0].Value.ToString();
                value_name = DGV.Rows[row_num].Cells[1].Value.ToString();

                this.Visible = false; // 현재 폼 안보이게 하기
                UPDATE_FORM frm = new UPDATE_FORM(); // 새 폼 생성

                frm.nidx = value_idx; // IDX 값 넘기기
                
                frm.Owner = this; // 새 폼의 오너를 현재 폼으로
                frm.Show(); // 새폼 보여주기
            }
            catch (Exception ex)
            {
                MessageBox.Show("UPDATE Error");
            }
        }

 

아무 Cell이나 클릭하고 UPDATE 버튼을 클릭 시 Cell의 idx값을 추출할 수 있도록 하였다.


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;
using Oracle.DataAccess.Client; // Oracle

namespace DataGridView_STUDY
{
    public partial class UPDATE_FORM : Form
    {
        protected internal string nidx;

        O_class oc = new O_class();
        OracleCommand cmd;
        OracleDataReader reader;

        string sq;

        private string name;
        private string bd;
        private string gender;
        private int age;
        private string cp;
        private string addr;

        public UPDATE_FORM()
        {
            InitializeComponent();
        }

        private void UPDATE_FORM_Load(object sender, EventArgs e)
        {
            try
            {
                oc.Oi_conn();

                sq = "SELECT * FROM USER_TEST WHERE USER_IDX=" + nidx + "";

                cmd = new OracleCommand(sq, oc.oconn);
                reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    TB_IDX.Text = reader.GetInt32(0).ToString();

                    TB_NAME.Text = reader.GetString(1);

                    TB_BD.Text = reader.GetString(2);

                    if (reader.GetString(3) == "여자")
                    {
                        RB_W.Checked = true;
                    }
                    else if (reader.GetString(3) == "남자")
                    {
                        RB_M.Checked = true;
                    }

                    UD_AGE.Value = reader.GetInt32(4);

                    TB_CP.Text = reader.GetString(5);

                    TB_ADDR.Text = reader.GetString(6);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Load Error");
                this.Visible = false; // 현재 폼 안보이게 하기
                DataGridView_STUDY frm = new DataGridView_STUDY(); // 새 폼 생성
                frm.Owner = this; // 새 폼의 오너를 현재 폼으로
                frm.Show(); // 새폼 보여주기
            }
        }

        private void BTN_UPDATE_Click(object sender, EventArgs e)
        {
            try
            {
                gender = string.Empty;

                if (RB_M.Checked)
                {
                    gender = "남자";
                }
                else if (RB_W.Checked)
                {
                    gender = "여자";
                }

                name = TB_NAME.Text;
                bd = TB_BD.Text;
                age = Int32.Parse(UD_AGE.Value.ToString());
                cp = TB_CP.Text;
                addr = TB_ADDR.Text;

                oc.Oi_conn();

                sq = "UPDATE USER_TEST SET " +
                        "USER_NAME = '" + name + "',USER_BIRTHDAY = '" + bd + "',USER_GENDER = '" + gender + "', " +
                        "USER_AGE =" + age + ",USER_CELLPHONE ='" + cp + "', USER_ADDR = '" + addr + "' WHERE USER_IDX =" + nidx + "";

                cmd = new OracleCommand(sq, oc.oconn);
                cmd.ExecuteNonQuery();

                MessageBox.Show("수정이 완료되었습니다");

                oc.oconn.Close();

                this.Visible = false; // 현재 폼 안보이게 하기
                DataGridView_STUDY frm = new DataGridView_STUDY(); // 새 폼 생성
                frm.Owner = this; // 새 폼의 오너를 현재 폼으로
                frm.Show(); // 새폼 보여주기
            }
            catch
            {
                MessageBox.Show("UPDATE Error");
            }
        }

        private void BTN_BACK_Click(object sender, EventArgs e)
        {
            this.Visible = false; // 현재 폼 안보이게 하기
            DataGridView_STUDY frm = new DataGridView_STUDY(); // 새 폼 생성
            frm.Owner = this; // 새 폼의 오너를 현재 폼으로
            frm.Show(); // 새폼 보여주기
        }
    }
}

추출한 idx값으로 Form Load를 통해 해당 idx의 데이터를 불러왔다

 

이름과 성별을 바꿔주고 UPDATE 버튼을 클릭하면

 

이름과 성별이 바뀌었다


DELETE

 private void BTN_DELETE_Click(object sender, EventArgs e)
        {
            try
            {
                // DataGridView 값 가져오기
                row_num = DGV.CurrentCell.RowIndex;
                value_idx = DGV.Rows[row_num].Cells[0].Value.ToString();
                value_name = DGV.Rows[row_num].Cells[1].Value.ToString();

                // if (MessageBox.Show("MessageBox 내용", "MessageBox 제목", MessageBoxButtons.YesNo) == DialogResult.Yes)
                if (MessageBox.Show("IDX : " + this.value_idx + "\nNAME : " + this.value_name + "\n\n삭제하시겠습니까?", "DELETE BUTTON", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    oc.Oi_conn();

                    sq = "DELETE USER_TEST WHERE USER_IDX = " + value_idx + "";

                    cmd = new OracleCommand(sq, oc.oconn);
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("삭제되었습니다");

                    DataGridView_STUDY_Load(null, null); // 로드를 다시 불러옴 (새로고침 느낌) || 메소드 만들기

                    oc.oconn.Close();
                }
            }
            catch
            {
                MessageBox.Show("DELETE Error");
            }
        }

DELETE 또한 마찬가지로 아무 Cell이나 클릭하고 DELETE 버튼을 클릭 시 Cell의 idx값을 추출할 수 있도록 하였다.

 

 

해당 박윤섭의 데이터가 사라진 것을 볼 수가 있다


INSERT

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;
using Oracle.DataAccess.Client; // Oracle

namespace DataGridView_STUDY
{
    public partial class INSERT_FORM : Form
    {
        O_class oc = new O_class();
        OracleCommand cmd;

        string name;
        string bd;
        string gender;
        int age;
        string cp;
        string addr;
        string sq;

        public INSERT_FORM()
        {
            InitializeComponent();
        }

        private void BTN_INSERT_Click(object sender, EventArgs e)
        {
            try
            {
                name = TB_NAME.Text;
                bd = TB_BD.Text;

                if (RB_M.Checked == true)
                {
                    gender = RB_M.Text;
                }
                else if (RB_W.Checked == true)
                {
                    gender = RB_W.Text;
                }

                age = Int32.Parse(UD_AGE.Value.ToString());
                cp = TB_CP.Text;
                addr = TB_ADDR.Text;

                if (name == string.Empty || bd == string.Empty || gender == string.Empty ||
                    age == 0 || cp == string.Empty || addr == string.Empty)
                {
                    MessageBox.Show("공백없이 입력해주세요");
                    return;
                }

                oc.Oi_conn();

                sq = "INSERT INTO USER_TEST VALUES(USER_IDX.NEXTVAL,'" + name + "','" + bd + "','" + gender + "'," + age + ",'" + cp + "','" + addr + "')";

                cmd = new OracleCommand(sq, oc.oconn);
                cmd.ExecuteNonQuery();

                MessageBox.Show("입력되었습니다.");

                oc.oconn.Close();

                this.Visible = false; // 현재 폼 안보이게 하기
                DataGridView_STUDY frm = new DataGridView_STUDY(); // 새 폼 생성
                frm.Owner = this; // 새 폼의 오너를 현재 폼으로
                frm.Show(); // 새폼 보여주기
            }
            catch(Exception ex)
            {
                MessageBox.Show("INSERT Error");
            }
        }

        private void BTN_BACK_Click(object sender, EventArgs e)
        {
            this.Visible = false; // 현재 폼 안보이게 하기
            DataGridView_STUDY frm = new DataGridView_STUDY(); // 새 폼 생성
            frm.Owner = this; // 새 폼의 오너를 현재 폼으로
            frm.Show(); // 새폼 보여주기
        }
    }
}