본문 바로가기
IT

9.1 사용자 조건식 불러오기

by 엘리후 2021. 6. 25.

9.1장은 사용자 조건식을 불러오는 방법입니다. 먼저 화면을 구성합니다.

conditionDataGridView의 속성

속성
(Name) conditionDataGridView
AllowUserToAddRows False
AllowUserToDeleteRows False
RowHeaderVisible False
SelectionMode FullRowSelect

화면 구성을 마쳤다면 Form1.cs에 코드를 작성해서 조건식을 요청하겠습니다. 조건식 요청하는 순서는 다음과 같습니다.

GetConditionLoad(일반함수) 호출 -> OnReceiveConditionVer(이벤트 함수) 호출 -> GetConditionNameList(일반함수) 호출
GetConditionLoad 함수를 호출하면 OnReceiveConditionVer이벤트 함수가 호출됩니다. OnReceiveConditionVer함수 안에서 GetConditionNameList 함수를 호출해서 조건식 목록을 가져옵니다.
9.1장에서는 사용자가 로그인하면 호출되는 OnEventConnect 함수 안에서 GetConditionLoad함수를 호출하도록 하겠습니다.
public void onEventConnect(object sender , AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e) { if (e.nErrCode==0) { axKHOpenAPI1.GetConditionLoad(); } }
axKHOpenAPI1.GetConditionLoad(); 함수는 조건 검색 목록 요청을 성공하면 1 , 아니면 0을 리턴합니다. OnReceiveConnect 함수에서 GetConditionLoad 함수를 호출했다면 이제 Form1.cs의 생성자에 OnReceiveConditionVer함수를 추가합니다.
axKHOpenAPI1.OnReceiveConditionVer += onReceiveConditionVer;
OnReceiveConditionVer 함수의 내용을 작성합니다. OnReceiveConditionVer 함수의 AxKHOpenAPILib.DKHOpenAPIEventsOnReceiveConditionVerEvent 타입 매개변수에는 사용자가 GetConditionLoad를 통해서 보낸 요청의 결과가 담겨 있습니다.
public void onReceiveConditionVer(object sender , AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveConditionVerEvent e) { if (e.lRet == 1) { axKHOpenAPI1.GetConditionNameList(); } }
함수를 정의한 모습입니다. 객체 e에 담긴 IRet 결과값이 1이면 정상적으로 조건식 정보가 요청 된 것입니다. 조건식 정보가 잘 요청 되었다면 GetConditionNameList 함수를 호출해서 조건식 이름들을 요청합니다. GetConditionNameList 함수를 호출해서 조건식을 요청하면 아래와 같은 형태로 결과가 반환됩니다.
007^조건식1;008^조건식2;014^조건식3;015^조건식4;020^조건식5;000^조건식6;
; 과 ^로 구분되어 있는 조건식인덱스와 조건식 이름을 분리해서 화면에 바인딩 하도록 하겠습니다.
맨 끝에 붙어있는 ;은 Split을 사용해서 문자열을 분리 할 때 문제를 발생시키므로 제거해줍니다.
string conditionList = axKHOpenAPI1.GetConditionNameList().TrimEnd(';');
TrimEnd 함수를 사용해서 맨 끝의 ; 을 제거했습니다. 조건식 인덱스와 조건식 이름을 얻기 위해서는 1차적으로 ;을 기준으로 문자열을 분리하고 , 2차로 ^을 기준으로 문자열을 분리해야 합니다. 문자열 맨 끝에 ;이 있으면 ;을 기준으로 분리할때 프로그램은 ; 뒤에 다른 문자열이 더 있는 것으로 인식하기 때문에 에러가 발생합니다. 아래와 같이 코드를 작성하면 조건식 인덱스와 조건식이름을 콘솔창에서 확인 할 수 있습니다.
public void onReceiveConditionVer(object sender , AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveConditionVerEvent e) { if (e.lRet == 1) { string conditionList = axKHOpenAPI1.GetConditionNameList().TrimEnd(';'); string[] conditionArray = conditionList.Split(';'); for (int i = 0; i < conditionArray.Length; i++) { string[] condition = conditionArray[i].Split('^'); Console.WriteLine("인덱스 = " + condition[0]); Console.WriteLine("조건식이름 = " + condition[1]); } } }
for 문 이전에 ;을 사용해서 문자열을 먼저 분리합니다. 그리고 ^를 기준으로 각각의 "조건식인덱스^조건식이름" 문자열을 분리합니다. 이제 분리한 조건식 인덱스와 조건식 이름을 화면에 바인딩 해보도록 하겠습니다.
conditionDataGridView.Rows.Add(); conditionDataGridView["조건식_조건식번호", i].Value = condition[0]; conditionDataGridView["조건식_조건식이름", i].Value = condition[1];
DataGridView에 행을 추가하고 인덱스마다 값을 바인딩 합니다.
전체 코드입니다.
using System.Windows.Forms; namespace WindowsFormsApp5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); axKHOpenAPI1.CommConnect(); axKHOpenAPI1.OnEventConnect += onEventConnect; axKHOpenAPI1.OnReceiveConditionVer += onReceiveConditionVer; } public void onReceiveConditionVer(object sender , AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveConditionVerEvent e) { if (e.lRet == 1) { string conditionList = axKHOpenAPI1.GetConditionNameList().TrimEnd(';'); string[] conditionArray = conditionList.Split(';'); for (int i = 0; i < conditionArray.Length; i++) { string[] condition = conditionArray[i].Split('^'); conditionDataGridView.Rows.Add(); conditionDataGridView["조건식_조건식번호", i].Value = condition[0]; conditionDataGridView["조건식_조건식이름", i].Value = condition[1]; } } } public void onEventConnect(object sender , AxKHOpenAPILib._DKHOpenAPIEvents_OnEventConnectEvent e) { if (e.nErrCode==0) { axKHOpenAPI1.GetConditionLoad(); } } } }
실행화면입니다.

9.2장에서는 조건식을 사용해서 종목을 검색하는 방법에 대해서 알아보도록 하겠습니다.

댓글