화면에 입력받은 내용을 CSV로 출력하는 간단한 예제입니다.

화면 구성은 다음과같이 해보았습니다.

그리드의 옵션은 다음과 같습니다.

추가, 변경, 삭제 를 허용합니다.


소스는 따로 첨부하겠습니다.

전체적으로 간단한 내용입니다만, 세부적인 설정은 소스를 참고해주세요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
        private void button1_Click(object sender, EventArgs e)
        {
            using (StreamWriter writer = new StreamWriter(@"D:\test.csv"falseEncoding.GetEncoding("shift_jis")))
            {
                int rowCount = dataGridView1.Rows.Count;
 
                if (dataGridView1.AllowUserToAddRows == true)
                {
                    rowCount = rowCount - 1;
                }
 
                // 行
                for (int i = 0; i < rowCount; i++)
                {
                    // 리스트 초기화
                    List<string> strList = new List<string>();
 
                    // 列
                    for (int j = 0; j < dataGridView1.Columns.Count; j++)
                    {
                        strList.Add(dataGridView1[j, i].Value.ToString());
                    }
                    String[] strArray = strList.ToArray(); // 배열로 변환
 
                    // CSV 형식으로 변환
                    String strCsvData = String.Join(",", strArray);
                    writer.WriteLine(strCsvData);
                }
 
                MessageBox.Show("저장완료 ");
                writer.Close();
            }
 
        }
cs


초기 실행화면은 아래와 같습니다.


세 줄의 데이터를 입력하고 출력을 해보겠습니다.

개념을 설명하기위한 간단한 샘플이기에, Export 경로는 버튼클릭 이벤트에서 하드코드로 작성하였습니다.

[CSV Export] 버튼을 눌러보겠습니다.

가 메세지박스로 표시되었습니다.


출력된 CSV를 확인해보겠습니다.

화면에 입력된대로 출력된것을 확인할수 있습니다.


전체소스는 아래에서 다운받을수 있습니다.

DataGridCsvExport.zip


질문

datagridview Row

비공개
질문77건
질문마감률97.2%
질문채택률91.6%
2018.01.08. 17:20
조회수13
첨부 이미지


1번처럼 AllowUserToAddRows 를 Ture 로 하면 그리드뷰 로우에 아무것도 쓸수가없고
2번처럼 AllowUserToAddRows 를 false 로 하면 한줄만 적었을뿐인데 아래로 한칸이 내려가서
보기가 싫어요... 2번같은 경우는 그냥 전두 다 적지않아도.. 무언가 입력이 되는동시에 바로 
한줄이 생겨서 보기가 싫어요 ㅠㅠ

질문 : 2번처럼 되고 엔터를 칠때만 Row한줄이 생기는방법은 없을까요?
아니면 더 좋은 다른방법이 있을까요? 도와주세요.




데이터그리드의 엔터키 입력시에 열을 추가하는 방법에 대한 질문이 있었습니다.

아래와같이 해보시면 제어가 가능합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.Rows.Add();
        }
 
        private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dataGridView1.Rows.Add();
            }
        }
    }
}
 
cs

참고하세요.


 그리드 컨트롤 수정모드   | WinForm Program2017-12-05 오후 5:05:36

쇼니번호: 175929  추천:0  / 읽음:78


 저는 gridview.OptionsBehavior.Editable = true 를 이용해서
수정할 수 있게 했는데요
이렇게 하니까 수정하고 싶지 않은행까지 수정모드로 들어가서 수정이 되더라구요

순번이 없는 행은 수정을 못하게 하고 싶은 데
어떤 속성을 줘야하는 지 모르겠습니다.
도와주세요 ㅠㅠㅠ 제발



위의 질문에 대한 답변입니다.

그리드 컨트롤을 사용하다보면, 특정 컬럼의 부분만 조건에 대해서 편집을 가능하도록 하는 기능을 필요로 하는 경우가 있습니다


그림과같이 만들어 보았습니다.

단순하게 그냥 컨트롤을 배치해두기만 했습니다.


이후에 코드제어는 아래와 같습니다.

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        //CellBeginEdit이벤트 핸들러
        private void DataGridView1_CellBeginEdit(object sender,
            DataGridViewCellCancelEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            //편집되는지 판단
            if (dgv.Columns[e.ColumnIndex].Name == "Column2" && dgv["Column2", e.RowIndex].Value == null)
            {

            }
            else
            {
                // 조건 이외에는 편집이 되지 않도록 제어
                e.Cancel = true;
            }
        }
    }
}
 

풀소스는 압축해서 아래에 올려두겠습니다.

패스워드 : 20171211

WindowsFormsApplication1.zip



+ Recent posts