처음에는 m_dsMain.Tables[0].Rows 수만큼 loop 처리해서 해야 하는 줄 알았는데 그러니...

컬렉션이 변경되었다며 에러가 나는구나.

  1. foreach (DataRow dr in m_dsMain.Tables[0].Select())
  2. {
  3. if (dr["SEQ"].ToString() == "3")
  4. {
  5. m_dsMain.Tables[0].Rows.Remove(dr);
  6. }
  7. }
  •  

     

    Select() 메소드는 Row를 다이내믹하게 불러와 처리하게 되므로 문제가 없다고 한다.

     

     

     

     

    <참조> http://blog.naver.com/PostView.nhn?blogId=zehny&logNo=140098866676

     

     

     

    추가는 이렇게

    1. DataRow dr = dsGrid.Tables[0].NewRow();
    2. dr["SEQ"] = Convert.ToString(dsGrid.Tables[0].Rows.Count + 1);
    3. dr["DATE"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    4. dr["TMNO"] = sTM_NO;
    5. dr["ITEM"] = sItem;
    6. dsGrid.Tables[0].Rows.Add(dr);

    삭제할때 정확한 index를 알고 있다면

     

    1. m_dsMain.Tables["Main"].Rows.RemoveAt(gridMain.ActiveRow.Index);
  •  

    이렇게 사용해도 된다.

     

     

    첨에 DataSet 핸들링이 어려워 너무 고생했다. 물론 아직 DataSet은 내 손에 익진 않지만 dataset을 알고자 할때

    DataTabe, DataRow를 알면 GameSet이 아닌가 하는 생각이 든다.

     


    WRITTEN BY
    테네시왈츠
    항상 겸손하게 항상 새롭게 항상 진실하게

    ,

    개발을 할때 그리드를 컨트롤 한다는 것은 아주 기본적이면서도 각각의 그리드의 특성이 있기 때문에

    각 그리드의 컨트롤을 한다는 것이 얼마나 번거롭고 귀찮은 것인지 겪은 사람은 다 알것이라고 생각된다.

     

    나도 마찬가지로 현재까지 주로 많이 썼던것이 ms 기본 컨트롤인 datagridview를 비롯하여 farpoint의 spread(Sheet이긴 하지만), ultragrid등을

    써 보았는데 개인적으로는 개발세팅에 많은 불편함이 있는 상용컨트롤의 사용을 많이 자제 할려고 노력하고 있다.

     

    이번 프로젝트 하면서 처음으로 ultragrid를 사용해 보았는데 이 놈 또한 여간 성가신게 아니다.

    직접 그리드를 컨트롤 해서 하니 속도문제 그리고 부하문제도 많이 발생 하는것 같고... 아직 불안불안 하게 사용하고 있다만서도

    ultragrid는 dataset를 직접 핸들링 하면서 값을 가감 하면 속도가 엄청 빨라진다.

     

    체크박스는 콤보박스는 아직 못해봤는데 여전히 숙제로 남아 있다.

     

    dataset 핸들링 하는데 많은 경험이 없어 시험 삼아 해본 샘플 프로그램이다.

     

     

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace WindowsFormsApplication4
    10. {
    11. public partial class Form1 : Form
    12. {
    13. private DataSet m_dsMain = null;
    14. private int iIDX = 0;
    15. public Form1()
    16. {
    17. InitializeComponent();
    18. }
    19. private void Form1_Load(object sender, EventArgs e)
    20. {
    21. // Main DataSet 설정
    22. m_dsMain = new DataSet();
    23. this.ultraGrid1.DataSource = m_dsMain;
    24. m_dsMain.Tables.Add("Main");
    25. m_dsMain.Tables["Main"].Columns.Add("SEQ");
    26. m_dsMain.Tables["Main"].Columns.Add("DATE");
    27. }
    28. private void button1_Click(object sender, EventArgs e)
    29. {
    30. DataRow dr = m_dsMain.Tables["Main"].NewRow();
    31. dr["SEQ"] = Convert.ToString(m_dsMain.Tables["Main"].Rows.Count + 1);
    32. dr["DATE"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    33. m_dsMain.Tables["Main"].Rows.Add(dr);
    34. }
    35. private void button2_Click(object sender, EventArgs e)
    36. {
    37. if (ultraGrid1.ActiveRow == null)
    38. {
    39. return;
    40. }
    41. m_dsMain.Tables["Main"].Rows.RemoveAt(ultraGrid1.ActiveRow.Index);
    42. for (int i = 0; i < m_dsMain.Tables["Main"].Rows.Count; i++)
    43. {
    44. m_dsMain.Tables["Main"].Rows[i]["SEQ"] = i + 1;
    45. }
    46. }
    47. private void button3_Click(object sender, EventArgs e)
    48. {
    49. m_dsMain.Clear();
    50. }
    51. }
    52. }

     


    WRITTEN BY
    테네시왈츠
    항상 겸손하게 항상 새롭게 항상 진실하게

    ,