none
[C#] 콤보박스 리스트 선택시 GridView에 데이터 업데이트 RRS feed

  • 질문

  • xml 분석 프로그램을 작성하고 있습니다.

    질문1.

    위와 같은 디자인으로 만들었습니다.

    xml파일을 불러오면 콤보박스에 리스트가 나타나고 왼쪽에 있는 그리드뷰에 해당 데이터가 출력되고

    기본적으로 리스트박스에서 Data[0]에 해당되는 데이터가 오른쪽 그리드뷰에 출력되게 되어있습니다.

    그런데 리스트박스에서 다른 리스트를 선택하고 콤보박스의 리스트를 바꾸면 오른쪽 그리드뷰에 있는 데이터가 업데이트 되지만

    리스트박스를 건드리지 않고 콤보박스 리스트를 바꾸어 선택하면 오른쪽 그리드뷰의 데이터가 업데이트되지않고 이전의 값만 출력시키고 있습니다.

    리스트박스에서 선택을 해야만 데이터가 업데이트되네요...ㅠㅠ

    답변좀 부탁드려요

    코드는 다음과 같습니다.

    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 System.IO;
    using System.Xml;
    using System.Xml.Schema;
    namespace MLD_Manager
    {
        public partial class MLD_manager : Form
        {
            OpenFileDialog ofd = new OpenFileDialog();
            SaveFileDialog sfd = new SaveFileDialog();
            public MLD_manager()
            {
                InitializeComponent();
                //마지막 BlankRow 안생기도록
                dataGridView1.AllowUserToAddRows = false;
                dataGridView2.AllowUserToAddRows = false;
            }
            private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
            {
                AboutBox2 ab = new AboutBox2();
                ab.ShowDialog();
            }
            private DataSet ds;
            private void toolStripButton1_Click(object sender, EventArgs e)
            {
                ofd.Filter = "Xml 파일(*.xml)|*.xml|모든파일(*.*)|*.*";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    StreamReader re = new StreamReader(ofd.FileName);
                    textBox1.Text = string.Format("File Path - <{0}>", ofd.FileName);//파일 경로 출력
                    //textBox1.Text = re.ReadToEnd(); //파일 내용 출력
                    ds = new DataSet();
                    ds.ReadXml(re);
                    re.Close();
                    string s = ds.GetXml();
                    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //-----------------------------콤보 박스에 MULTI 문자가 들어간 item만 출력-------------------------------//
                    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
                    {
                        //listBox 초기화
                        listBox1.Items.Clear();
                        listBox1.Items.Add("Tx_LIN_Data[0]");
                        listBox1.Items.Add("Tx_LIN_Data[1]");
                        listBox1.Items.Add("Tx_LIN_Data[2]");
                        listBox1.Items.Add("Tx_LIN_Data[3]");
                        //DataRow[] arDR = ds.Tables[0].Select("name like '%" + textBox1.Text.Trim() + "%'");
                        DataRow[] arDR = ds.Tables[0].Select("name like '%" + "MULTI" + "%'");
                        if (arDR.Length > 0)
                        {
                            DataTable dt = new DataTable();
                            dt.Columns.Add("Text", typeof(string));
                            dt.Columns.Add("Value", typeof(string));
                            DataRow dr;
                            for (int i = 0; i < arDR.Length; i++)
                            {
                                dr = dt.NewRow();
                                dr["Value"] = arDR[i]["name"];
                                dr["Text"] = arDR[i]["name"];
                                dt.Rows.Add(dr);
                            }
                            comboBox1.DisplayMember = "Text";
                            comboBox1.ValueMember = "Value";
                            comboBox1.DataSource = dt;
                        }
                    }
                        //-------------------------------------------------------------------------------------------------------//
                        ///////////////////////////////////////////////////////////////////////////////////////////////////////////
                    
                }
            }
            private void toolStripButton2_Click(object sender, EventArgs e)
            {
                sfd.Filter = "Xml 파일(*.xml)|*.xml|모든파일(*.*)|*.*";
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    StreamWriter sw = new StreamWriter(sfd.FileName);
                    sw.Write(textBox1.Text);
                    sw.Close();
                }
            }
            private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
                {
                    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //------------------------------GridView에 콤보박스에서 선택된 데이터 출력-------------------------------//
                    DataRow[] arDR = ds.Tables[0].Select("name='" + Convert.ToString(comboBox1.SelectedValue) + "'");
                    if (arDR.Length > 0)
                    {
                        string[] sArr = Convert.ToString(arDR[0]["NvItem_Text"]).Split(',');
                        //왼쪽 DataGridView
                        if (sArr.Length >= 8)
                        {
                            DataTable newDT = new DataTable();
                            newDT.Columns.Add("Calibration Channel");
                            for (int iCol = 8; iCol < 24; iCol++)
                            {
                                //newDT.Columns.Add("Col" + (iCol + 1).ToString(), typeof(string));
                                newDT.Rows.Add(sArr[iCol]);
                            }
                            dataGridView2.DataSource = newDT.DefaultView;
                            setRowNumber(dataGridView2);
                        }
                        listBox1.SelectedIndex = 0;
                    }
                }
                    //-------------------------------------------------------------------------------------------------------//
                    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (listBox1.Items.Count > 0)
                {
                    DataRow[] arDR = ds.Tables[0].Select("name='" + Convert.ToString(comboBox1.SelectedValue) + "'");
                    if (arDR.Length > 0)
                    {
                        int start_txchain = 0; int end_txchain = 0;
                        int start_rgi = 0; int end_rgi = 0;
                        int start_pw = 0; int end_pw = 0;
                        int start_apt = 0; int end_apt = 0;
                        switch (Convert.ToString(listBox1.SelectedItem))
                        {
                            case "Tx_LIN_Data[0]":
                                start_txchain = 952; end_txchain = 952;
                                start_rgi = 953; end_rgi=1016;
                                start_pw = 1017; end_pw=1080;
                                start_apt = 1081; end_apt=1144;
                                break;
                            case "Tx_LIN_Data[1]":
                                start_txchain = 1145; end_txchain = 1145;
                                start_rgi = 1146; end_rgi=1209;
                                start_pw = 1210; end_pw=1273;
                                start_apt = 1274; end_apt=1337;
                                break;
                            case "Tx_LIN_Data[2]":
                                start_txchain = 1338; end_txchain = 1338;
                                start_rgi = 1339; end_rgi=1402;
                                start_pw = 1403; end_pw=1466;
                                start_apt = 1467; end_apt=1530;
                                break;
                            case "Tx_LIN_Data[3]":
    ;                           start_txchain = 1531; end_txchain = 1531;
                                start_rgi = 1532; end_rgi=1595;
                                start_pw = 1596; end_pw=1659;
                                start_apt = 1660; end_apt=1723;
                                break;
                        }
                        string[] sArr = Convert.ToString(arDR[0]["NvItem_Text"]).Split(',');
                        //오른쪽 DataGridView
                        if (sArr.Length >= end_apt)
                        {
                            DataTable newDT = new DataTable();
                            for (int i = 1; i <= (end_apt-start_apt+1); i++)
                                newDT.Columns.Add("" + i.ToString(), typeof(string));
                            DataRow txchain = newDT.NewRow();
                            for (int iCol = start_txchain, i = 1; iCol <= end_txchain; iCol++, i++)
                            {
                                txchain["" + i.ToString()] = Convert.ToString(sArr[iCol]);
                            }
                            newDT.Rows.Add(txchain);
                            DataRow rgi = newDT.NewRow();
                            for (int iCol = start_rgi, i = 1; iCol <= end_rgi; iCol++, i++)
                            {
                                rgi["" + i.ToString()] = Convert.ToString(sArr[iCol]);
                            }
                            newDT.Rows.Add(rgi);
                            DataRow pw = newDT.NewRow();
                            for (int iCol = start_pw, i = 1; iCol <= end_pw; iCol++, i++)
                            {
                                pw["" + i.ToString()] = Convert.ToString(sArr[iCol]);
                            }
                            newDT.Rows.Add(pw);
                            DataRow apt = newDT.NewRow();
                            for (int iCol = start_apt, i = 1; iCol <= end_apt; iCol++, i++)
                            {
                                apt["" + i.ToString()] = Convert.ToString(sArr[iCol]);
                            }
                            newDT.Rows.Add(apt);
                            
                            dataGridView1.DataSource = newDT.DefaultView;
                            setRowNumber(dataGridView1);
                        }
                    }
                }
            }
            private void setRowNumber(DataGridView dgv)
            {
                if (dgv.Rows.Count > 0) dgv.RowHeadersWidth = 70;
                foreach (DataGridViewRow row in dgv.Rows)
                {
                    row.HeaderCell.Value = String.Format("{0}", row.Index + 1);
                }
            }
        }
    }


    • 편집됨 Byeongha, Kim 2012년 12월 3일 월요일 오전 2:31
    2012년 12월 3일 월요일 오전 2:00

답변

  •   

    comboBox1_SelectedIndexChanged 이벤트안에 있는 다음 내용에 밑줄 부분을 추가하세요.

                      listBox1.SelectedIndex = 0;
                      listBox1_SelectedIndexChanged(null, null);

    • 답변으로 표시됨 Byeongha, Kim 2012년 12월 3일 월요일 오후 11:46
    2012년 12월 3일 월요일 오후 11:40