질문
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번째 답변
바로가기
네, 안녕하세요..
코드를 보면서.. 복잡한 느낌이 있어 아래와 같이 참조 코드를 작성해 보았사오니
검토하여 보세요.
테스트 용이 오니 테스트 성공하시면, 목적하시는 것 처럼 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이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
최근 공지사항이 없습니다.