! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

Spread 마우스드래그 후 저장방법 > Q&A | 토론

본문 바로가기

Spread.NET

Q&A | 토론

WinForms윈폼 Spread 마우스드래그 후 저장방법

페이지 정보

작성자 zxzero 작성일 2022-04-26 18:33 조회 1,401회 댓글 0건
제품 버전 : Spread.net14

본문

안녕하세요 질문드립니다.

1. 셀을 마우스 드래그 하여 + 생긴후 마우스를 놓는 순간(노란색)

아래의 두개의 셀을 DB에 저장 하려 합니다. 이벤트 발생및 샘플을 알려 주시기 바랍니다.


f1a4afb1d37df3e6d176172b70b20ac7_1650965421_553.GIF


2. 두개의 셀을 선택후 한셀 한셀 Copy후 

  셀이 아래셀(노란색)로 이동 되는 순간 Copy된셀을 DB에 저장 하려 합니다.

이벤트 발생및 샘플을 알려 주시기 바랍니다.

f1a4afb1d37df3e6d176172b70b20ac7_1650965535_6148.GIF


빠른 답변 부탁 드립니다


감사합니다.



 

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

4 답변

WinForms윈폼 Re: Spread 마우스드래그 후 저장방법

추천0 이 글을 추천하셨습니다 비추천0

페이지 정보

작성자 GCK써니 작성일 2022-04-27 11:38 댓글 0건

본문

zxzero 님, 안녕하세요.

그레이프시티입니다.


첫번째 문의 주신 내용에 대하여 우선 답변 드립니다.

드래그 채우기 후 마우스를 놓는 순간은 "DragFillBlockCompleted" 이벤트로 포착할 수 있습니다.

이때, 선택된 영역을 SheetView.GetSelection(0) 메소드로 가져올 수 있으며, 해당 영역의 CellRange.Row, RowCount, Column, ColumnCount를 사용하여 행/열 인덱스를 찾아, DB에 저장할 값에 접근할 수 있습니다.

하기 샘플을 개발에 참고해주시기 바랍니다.

private void Form1_Load(object sender, EventArgs e)
{
    fpSpread1.DragFillBlockCompleted += FpSpread1_DragFillBlockCompleted;
}

private void FpSpread1_DragFillBlockCompleted(object sender, FarPoint.Win.Spread.DragFillBlockCompletedEventArgs e)
{
    //드래기 채우기 후, 선택된 영역
    FarPoint.Win.Spread.Model.CellRange range = fpSpread1.ActiveSheet.GetSelection(0);

    //선택 영역의 마지막 행/열 인덱스
    int lastRow = range.Row + range.RowCount - 1;
    int lastColumn = range.Column + range.ColumnCount - 1;

    // 선택 영역의 좌상단 셀 데이터
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[range.Row, range.Column].Value);
    // 선택 영역의 우하단 셀 데이터
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[lastRow, lastColumn].Value);
}


두번째 문의 주신 내용에 대해서도 정리되는 대로 답변 드리도록 하겠습니다.

감사합니다.

그레이프시티 드림

댓글목록

등록된 댓글이 없습니다.

WinForms윈폼 Re: Spread 마우스드래그 후 저장방법

추천0 이 글을 추천하셨습니다 비추천0

페이지 정보

작성자 GCK써니 작성일 2022-04-27 13:52 댓글 0건

본문

zxzero 님, 안녕하세요.

그레이프시티입니다.


두번째 문의 내용에 대하여 답변드립니다.


클립보드로부터 데이터를 붙여넣었을 때 발생하는 "ClipboardPasted" 이벤트를 사용하여 원하시는 기능 구현이 가능할 것으로 예상됩니다.

하기 샘플 코드에서는, 셀에 데이터를 붙여넣기 한 후 다음 행으로 ActiveRowIndex를 변경하고 있으며, 이후 e.CellRange를 통해 데이터를 붙여넣기한 셀 영역을 가져오고 있습니다. 가져온 CellRange.Row, RowCount, Column, ColumnCount를 통해 붙여넣기한 셀 영역의 인덱스를 찾을 수 있습니다.

이를 활용하여 DB에 저장할 값을 특정해주시기 바랍니다.

private void Form1_Load(object sender, EventArgs e)
{
    fpSpread1.ClipboardPasted += FpSpread1_ClipboardPasted;
}

private void FpSpread1_ClipboardPasted(object sender, FarPoint.Win.Spread.ClipboardPastedEventArgs e)
{
    // 붙여넣기 직후, 셀을 아래셀(노란색)으로 이동합니다.
    fpSpread1.ActiveSheet.ActiveRowIndex += e.CellRange.RowCount;

    // 붙여넣기한 셀의 인덱스를 찾습니다.
    FarPoint.Win.Spread.Model.CellRange range = e.CellRange;
    int lastRow = range.Row + range.RowCount - 1;
    int lastColumn = range.Column + range.ColumnCount - 1;

    // 인덱스로 셀에 접근하여 값을 가져옵니다.
    // 붙여넣기 영역의 좌상단 셀 데이터
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[range.Row, range.Column].Value);
    // 붙여넣기 영역의 선택 영역의 우하단 셀 데이터
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[lastRow, lastColumn].Value);
}


적용에 어려움이 있거나 추가로 궁금하신 사항이 있는 경우, 문의주시기 바랍니다.

감사합니다.

그레이프시티 드림

댓글목록

등록된 댓글이 없습니다.

WinForms윈폼 Re: Spread 마우스드래그 후 저장방법

추천0 이 글을 추천하셨습니다 비추천0

페이지 정보

작성자 zxzero 작성일 2022-05-01 16:05 댓글 0건

본문

안녕하세요 빠른 답변 정말 감사합니다.

0번째 Row 에서 4번째 Row로 Copy하는 예제를 만들었습니다.

아래 이미지와 같이 0 Row 값은 없고 first Last 둘다 Last Row를 보여주고 있습니다.


f1a4afb1d37df3e6d176172b70b20ac7_1651388408_6235.GIF


소스는 아래와 같습니다.

  private void Form2_Load(object sender, EventArgs e)

        {

            fpSpread1.ClipboardPasted += fpSpread1_ClipboardPasted;

         }


private void fpSpread1_ClipboardPasted(object sender, ClipboardPastedEventArgs e)

        {

            // 붙여넣기 직후, 셀을 아래셀(노란색)으로 이동합니다.

            fpSpread1.ActiveSheet.ActiveRowIndex += e.CellRange.RowCount;

            // 붙여넣기한 셀의 인덱스를 찾습니다.

            FarPoint.Win.Spread.Model.CellRange range = e.CellRange;

            int lastRow = range.Row + range.RowCount - 1;

            int lastColumn = range.Column + range.ColumnCount - 1;

            // 인덱스로 셀에 접근하여 값을 가져옵니다.

            // 붙여넣기 영역의 좌상단 셀 데이터

            Console.WriteLine(fpSpread1.ActiveSheet.Cells[range.Row, range.Column].Value);

            Console.WriteLine("first Row :" + range.Row);

            // 붙여넣기 영역의 선택 영역의 우하단 셀 데이터

            Console.WriteLine(fpSpread1.ActiveSheet.Cells[lastRow, lastColumn].Value);

            Console.WriteLine("lastRow Row :" + lastRow);

        }


1.0 째 Row값을 알려 주시기 바랍니다.

2. Console.WriteLine() 문은 한번씩 썼는대 명령을 또한번 실행 하여

  두뻔 찍히게 됨니다. 이유를 알고 싶습니다.


감사합니다.



댓글목록

등록된 댓글이 없습니다.

WinForms윈폼 Re: Spread 마우스드래그 후 저장방법

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK써니 작성일 2022-05-02 16:00 댓글 0건

본문

zxzero 님, 안녕하세요.

그레이프시티입니다.


1.0 째 Row값을 알려 주시기 바랍니다.

 ClipboardPasted 이벤트의 e.CellRange는 붙여넣어진 셀 영역을 가져오는 것이기 때문에, 원본 데이터의 위치(0번째 Row)는 포함하지 않습니다. 따라서, 원본 데이터의 위치를 저장하고 싶으실 경우, ClipboardChanged 이벤트가 발생했을 때, 별도의 변수에 원본 데이터 영역(CellRange)를 저장해두시는 방법을 제안드립니다.

 하기 간단한 샘플 코드를 개발 시 참고해주시기 바랍니다.

FarPoint.Win.Spread.Model.CellRange copiedRange;

private void Form1_Load(object sender, EventArgs e)
{
    fpSpread1.ClipboardChanged += FpSpread1_ClipboardChanged;
    fpSpread1.ClipboardPasted += fpSpread1_ClipboardPasted;
    copiedRange = new FarPoint.Win.Spread.Model.CellRange(0, 0, 1, 1);
}

private void FpSpread1_ClipboardChanged(object sender, EventArgs e)
{
    // Clipboard 내용이 변경될 때, 선택되어있던 셀(복사된 셀) 영역을 가져옵니다.
    if(fpSpread1.ActiveSheet.GetSelection(0) != null)
    {
        copiedRange = fpSpread1.ActiveSheet.GetSelection(0);
    }
}

private void fpSpread1_ClipboardPasted(object sender, ClipboardPastedEventArgs e)
{
    // 붙여넣기 직후, 셀을 아래셀(노란색)으로 이동합니다.
    fpSpread1.ActiveSheet.ActiveRowIndex += e.CellRange.RowCount;

    // 붙여넣기한 셀의 인덱스를 찾습니다.
    FarPoint.Win.Spread.Model.CellRange range = e.CellRange;
    int lastRow = range.Row + range.RowCount - 1;
    int lastColumn = range.Column + range.ColumnCount - 1;

    // 원본데이터의 좌상단 셀 데이터와 RowIndex를 Console에 표시합니다.
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[copiedRange.Row, copiedRange.Column].Value);
    Console.WriteLine("원본 데이터 first Row : " + copiedRange.Row);

    // 붙여넣기 영역의 우하단 셀 데이터와 RowIndex를 Console에 표시합니다.
    Console.WriteLine(fpSpread1.ActiveSheet.Cells[lastRow, lastColumn].Value);
    Console.WriteLine("복사된 데이터 last Row :" + lastRow);
}


2. Console.WriteLine() 문은 한번씩 썼는데, 명령을 또한번 실행하여 두번 찍히게 됩니다. 이유를 알고 싶습니다.

 혹시 fpSpread1_ClipboardPasted 이벤트가 다음과 같이 두 번 추가되어있는 건은 아닌지요? 만약 이벤트 핸들러에 한번 등록되어있다면 하기 이미지처럼 한번만 찍히는 것이 정상입니다.

private void Form1_Load(object sender, EventArgs e)
{
    fpSpread1.ClipboardPasted += fpSpread1_ClipboardPasted;
    fpSpread1.ClipboardPasted += fpSpread1_ClipboardPasted;
}

6f305820e0fabf2bc568be057e08eeba_1651474844_0981.PNG
 


추가로 궁금하신 점이 있을 경우, 문의주시기 바랍니다.

감사합니다.

그레이프시티 드림

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.