NAVER

질문 c# 데이타그리드뷰의 셀클릭시 차트실행 질문요..
soda 조회수 83 작성일2022.06.16
public void 그리드뷰_CellClick(object sender, DataGridViewCellEventArgs e) //sender 가 컨트롤이다.
        {
            if (e.RowIndex < 0 || e.ColumnIndex < 0) return;
            
            try
            {

                if (sender.Equals(코스피그리드뷰) && 코스피그리드뷰.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
                {
                    코스피그리드뷰.CurrentCell.Selected = true;
                    string 종목명 = 코스피그리드뷰.Rows[e.RowIndex].Cells["종목명p"].FormattedValue.ToString();

                    단주 찾기 = 최종단주.Find(o => o.종목이름.Equals(종목명));

                    if (찾기 != null && 종목명 == 찾기.종목이름)
                    {
                        차트(코스피그리드뷰, e);
                        MessageBox.Show(종목명);

                    }

                }
                else if (sender.Equals(코스닥그리드뷰) && 코스닥그리드뷰.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
                {

                    코스닥그리드뷰.CurrentCell.Selected = true;
                    string 종목명1 = 코스닥그리드뷰.Rows[e.RowIndex].Cells["종목명d"].FormattedValue.ToString();

                    단주 찾기1 = 최종단주.Find(o => o.종목이름.Equals(종목명1));

                    if (찾기1 != null && 종목명1 == 찾기1.종목이름)
                    {
                        MessageBox.Show(종목명1);
                        차트(코스닥그리드뷰, e);
                    }

                }
                
            }
            catch
            { }
        }

 public void 차트(object sender, EventArgs e)
        {
            
            if(sender.Equals(코스피그리드뷰))
            {
                코스피차트.Series.Clear();

                

                foreach (단주 item in 최종단주)
                {
                    if (item.Qquantity > 0)
                    {
                        

                        코스피차트.Series["Series1"].Points.AddXY(item.Qtime_int, item.Qquantity); //x축 , y축 //+체결량일때 [0]고가,[1]저가,[2]시가,[3]현재가
                    }

                    if (item.Qquantity < 0)
                    {
                        코스피차트.Series["Series2"].Points.AddXY(item.Qtime_int, Math.Abs(item.Qquantity)); //x축 , y축 //-체결량일때 
                    }

                    코스피차트.Series["Series3"].Points.AddXY(item.Qtime_int, 0); //x축 , y축 //-체결량일때 

                    코스피차트.DataBind();
                }
            }
            else if (sender.Equals(코스닥차트))
            {
                코스닥차트.Series.Clear();

                foreach (단주 item in 최종단주)
                {
                    if (item.Qquantity > 0)
                    {

                        코스닥차트.Series["Series1"].Points.AddXY(item.Qtime_int, item.Qquantity); //x축 , y축 //+체결량일때 [0]고가,[1]저가,[2]시가,[3]현재가
                    }

                    if (item.Qquantity < 0)
                    {
                        코스닥차트.Series["Series2"].Points.AddXY(item.Qtime_int, Math.Abs(item.Qquantity)); //x축 , y축 //-체결량일때 
                    }

                    코스닥차트.Series["Series3"].Points.AddXY(item.Qtime_int, 0); //x축 , y축 //-체결량일때 

                    코스닥차트.DataBind();

                }
            }





        }



보시면 데이타그리드뷰의 셀을 선택하면 종목명 == 찾기.종목이름) 이게 같을시에
해당 차트를 열고싶습니다..

헌데 제가 초보라 연계하는걸 잘모르겠습니다..

원리는 list에 데이타가 저장되있고 이를 foreach를 통해 출력을 하려고 합니다. 

보시면 코스피데이타그리드뷰 의 셀에 종목명을 클릭했을시 차트의 해당 종목 데이타를 열고싶은데..
위 코드에서 보안 해야할부분이 무엇일까요..

그리고 함수전달하는법중에 차트(object sender, EventArgs e) 이것을 호출을 할때 차트(코스피그리드뷰, e);이렇게 하는게 맞는가요? (object sender, EventArgs e) 임의로 만들엇는데 이해가 안되네요...자세한 설명도 부탁드립니다... ㅠ
프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
VIV
초인 eXpert
IT/인터넷업 #서버운영및관리 #프로그램개발 C# 6위, C, C++, 데이터베이스 분야에서 활동
본인 입력 포함 정보

네, 안녕하세요..

코드를 보면서.. 복잡한 느낌이 있어 아래와 같이 참조 코드를 작성해 보았사오니

검토하여 보세요.

테스트 용이 오니 테스트 성공하시면, 목적하시는 것 처럼 foreach 로 감싸서 처리 하시면 되겠습니다.

그럼..

private readonly DataGridView 코스피그리드뷰 = new DataGridView(); // 추정 private readonly DataGridView 코스닥그리드뷰 = new DataGridView(); // 추정 private const string _코스피_종목명 = "종목명p"; private const string _코스닥_종목명 = "종목명d"; public void 그리드뷰_CellClick(object sender, DataGridViewCellEventArgs e) //sender 가 컨트롤이다. { // 이상한데 클릭하여 인바운드 된 것인지 확인 if (e.RowIndex < 0 || e.ColumnIndex < 0) return; // 셀클릭한 그리드 뷰 sender 를 패턴매치 하여 view 변수에 할당 if (!(sender is DataGridView view)) return; // view 가 둘중 누구인가에 따라 찾을 컬럼명을 _컬럼 변수로 일반화 하여 단일화 함 // 즉 view 가 코스피 이면 => 종목명p, 아니면 .. 당연히 코스닥이니 => 종목명d 가 _컬럼이 됨 var _컬럼 = view.Name == nameof(코스피그리드뷰) ? _코스피_종목명 : _코스닥_종목명; // 일단 셀 자체를 가져옴 DataGridViewCell _종목 = view.Rows[e.RowIndex].Cells[_컬럼]; // 그리고 해당하는 자료가 목록에 있는 먼저 확인하기... null check // check 후에는 First (FirstOrDefault 아님(X))로 해당 항목을 가져옴 if (최종단주.Any(a => a.종목이름 == _종목.FormattedValue?.ToString())) { 단주 _단주 = 최종단주.First(f => f.종목이름 == _종목.FormattedValue?.ToString()); // 검색한 목적이 단일 행 값인데.. // 차트 구성에서는 이상하게 전체를 보내고 foreach 를 돌리는지는 의문?? // 아무튼 차트 구성으로 검색한 자료를 구분하여 던짐.. 차트(_단주, _컬럼 == nameof(_코스피_종목명)); } } /// <summary> /// 차트 구성 /// </summary> /// <param name="_단주"></param> /// <param name="_구분">true = 코스피, false = 코스닥</param> public void 차트(단주 _단주, bool _구분) { switch (_구분) { case true: { if (_단주.Qquantity > 0) { //x축 , y축 //+체결량일때 [0]고가,[1]저가,[2]시가,[3]현재가 코스피차트.Series["Series1"].Points.AddXY(_단주.Qtime_int, _단주.Qquantity); } if (_단주.Qquantity < 0) { //x축 , y축 //-체결량일때 코스피차트.Series["Series2"].Points.AddXY(_단주.Qtime_int, Math.Abs(_단주.Qquantity)); } //x축 , y축 //-체결량일때 코스피차트.Series["Series3"].Points.AddXY(_단주.Qtime_int, 0); 코스피차트.DataBind(); } break; case false: { 코스닥차트.Series.Clear(); if (_단주.Qquantity > 0) { //x축 , y축 //+체결량일때 [0]고가,[1]저가,[2]시가,[3]현재가 코스닥차트.Series["Series1"].Points.AddXY(_단주.Qtime_int, _단주.Qquantity); } if (_단주.Qquantity < 0) { //x축 , y축 //-체결량일때 코스닥차트.Series["Series2"].Points.AddXY(_단주.Qtime_int, Math.Abs(_단주.Qquantity)); } //x축 , y축 //-체결량일때 코스닥차트.Series["Series3"].Points.AddXY(_단주.Qtime_int, 0); 코스닥차트.DataBind(); break; } } }

// 모델 클래스

// 단주찾기 컬랙션의 모델 추정 ?? public class 단주 { public int 종목번호 { get; set; } public string 종목이름 { get; set; } public int Qquantity { get; set; } public int Qtime_int { get; set; } }

2022.06.16.

  • 채택

    질문자가 채택한 답변입니다.

VIV님의 엑스퍼트 상품
답변자에게 더 자세한 맞춤 상담하고 싶다면 엑스퍼트를 이용해보세요!
바로가기
도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.