2012-02-17 3 views
1

안녕하세요, 임시 데이터를 DataGridview에 추가하는 방법을 아는 사람이 계십니까?DataGridview에 여러 "임시"값을 추가하여 데이터베이스에 저장하십시오.

나는 2 콤보가 : genderComboBox (품목 : 여성, 남성), countryComboBox (항목 : 미국, 독일) 1 버튼 (buttonAdd) : 1 DataGridView에 (genderColumn, countryColumn) :

는 어떻게 추가 할 수 있습니다 그 (것)들을 datagridview에? 나는 그들이 데이터베이스에 직접 저장하는 것을 원하지 않는다.

그리고 어떻게 여러 값을 gridview에 추가 할 수 있습니까? 나는 항상 새 열을 생성 버튼을 클릭

  1. 매번 :

    여기에 나는이 문제를 볼 수있는이 솔루션에서

    private void buttonAdd_Click(object sender, EventArgs e) 
         { 
          DataTable table = new DataTable(); 
          table.Columns.Add("Country"); 
          table.Rows.Add(countryComboBox.Text); 
          dataGridView1.DataSource = table; 
         } 
    

    을 시도거야. 내가 원하는 것은 단지 어떤 열을 지정하고 datas로 채울 것입니다.
  2. 버튼을 클릭 할 때마다 이전에 추가 한 내용이 추가되지 않습니다. 따라서 DataGrid에 임시 값을 여러 개 추가 할 수 없습니다.

감사합니다 !!!

답변

2

OnClick 이벤트가 포함 된 클래스의 datamember 인 목록 항목을 만듭니다. DataSource를 생성자의 목록으로 설정합니다. 누군가 '추가'버튼을 클릭하면 comobo 상자의 값을 사용하여 목록에 비정상적인 객체를 추가 한 다음 데이터 그레이드에 데이터를 리 바인드합니다. 다음은 간단한 예입니다.

YourClass 
{ 
private List<object> list; 

public Page_Load(object sender, args e) 
{ 
      if (!isPostBack) // only initialize once when the page first loads 
      { 
       list = new List<object>(); 
       datagrid.datasource = list; 
      } 
} 

protected void OnClickButton(object sender, args e) 
{ 
    list.add(new { Gender = genderComboBox.Text, Country = countryComoBox.Text }); 
    datagrid.DataBind(); 
} 
} 

편집 : 다음은 익명의 유형에 대한 자세한 정보를 원하시면, http://msdn.microsoft.com/en-us/library/bb397696.aspx에 대한 링크입니다. 필자는 열을 수동으로 생성하는 것보다 그리드를 빠르게 채울 수있는 유연성과 동적 성이 훨씬 뛰어납니다.

특정 문제를보다 잘 해결하기 위해 의견을 읽은 후 약간의 예제를 다시 작성했습니다.

+0

대단히 감사합니다! 나는 어떤 접근 방식이 더 나은가요? 그것을 datatable 또는 일반적인 목록에 넣어? –

+0

당신이 사용하는 방법은 개인적인 취향입니다. 나는 항상 OOP 방식에 더 익숙하다. 내게는 객체 목록 만 있으면 더 자연스럽게 느껴진다. 그런 다음 그 객체는 그리드와 컬럼이 아닌 속성을 갖는다. 반면에 관계 데이터베이스 시스템으로 더 많은 작업을한다면 datatable 접근 방식을 선호 할 것입니다. 상사가 다르게 말하는 경우를 제외하고는 가장 편안한 느낌으로 사용하십시오. – Despertar

+0

sir은 객체 클래스에 add 메소드가 있어야한다는 의미입니까? –

-1

이 작업을 시도 할 수 있습니다 :

//Create 2 datasource for combobox in grid 
       DataTable genderTable= new DataTable(); 
       genderTable.Columns.Add(new DataColumn("Value", typeof(int))); 
       genderTable.Columns.Add(new DataColumn("Name", typeof(String))); 
       genderTable.Rows.Add(new object[] { 0, 'male'}); 
       genderTable.Rows.Add(new object[] { 1, 'female'}); 

       DataTable countryTable= new DataTable(); 
       countryTable.Columns.Add(new DataColumn("Value", typeof(int))); 
       countryTable.Columns.Add(new DataColumn("Name", typeof(String))); 
       countryTable.Rows.Add(new object[] { 0, 'USA'}); 
       countryTable.Rows.Add(new object[] { 1, 'Germany'}); 

//Create 2 combobox column 
       DataGridViewColumn gender= new DataGridViewColumn(new DataGridViewComboBoxCell()); 
       DataGridViewColumn country= new DataGridViewColumn(new DataGridViewComboBoxCell()); 

//Add column into grid 
       dataGridView1.Columns.Add(gender); 
       dataGridView1.Columns.Add(country); 
// Add rows into grid, number of rows is 10 
       dataGridView1.Rows.Add(10); 

       for (int i = 0; i < 10; i++) { 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DataSource = genderTable; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DisplayMember = "Name"; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).ValueMember = "Value"; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).Value = 0; 

        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DataSource = countryTable; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DisplayMember = "Name"; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).ValueMember = "Value"; 
        ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).Value = 0; 
     } 

HTH를.

+0

을의 Form_Load, 시작에서 당신의 열을 만들? 왜 datagriviewComboboxCell이 있습니까? 나는 콤보 박스와 데이터 그리드를 디자이너에 이미 추가했는데 왜 수동으로 만들겠습니까? –

+0

행 수는 귀하의 요구에 따라 결정되어야합니다. 이미 combobox를 만든 경우이 열을 DataGrid에 추가하는 행을 제거하면됩니다. – Thinhbk

+0

선생님 내가 뭘 하려는지 DataGridview에 여러 임시 데이터를 추가하는 것입니다. 그리드에 배치 파일을 추가하는 것이 아닙니다. 내가 의미했던 것은 1 개의 데이터를 추가 한 다음 다른 데이터를 추가하는 것이고 그 모두가 DataGrid에 저장된다는 것입니다. 예 : 콤보 박스에서 성별을 선택하고 추가를 클릭하고 DataGrid에서 1 레코드를 표시합니다. 성별을 선택하고 추가를 클릭하고 데이터 그 리드에 2 개의 레코드 표시 –

1
  1. 클릭 할 때마다 항목을 만들기 때문에 문제가 발생합니다.
  2. 클릭 할 때마다 DataTable을 만들기 때문에 문제가 발생합니다.

생성 코드를 생성자에 넣은 다음 click 이벤트에서 add 메소드를 추가하십시오.

+0

고맙습니다. –

1
DataTable table = new DataTable(); 

결과가 새로운 명확한 Datatable입니다.이전 삽입 누락 된 이유는이

DataTable table = new DataTable(); 
private void buttonAdd_Click(object sender, EventArgs e) 
     { 
      //insert your value at the right place 
      datatable.rows.add(); 
      datatable.rows[datagrid.rows.count].cells[x].value = countrybox.Text; 
      //x = columns index of your country column 
     } 

처럼 수행 이잖아 것은 어쩌면 행의 수는 선생님을 설정 한 이유는

datatable.columns.add("country"); 
관련 문제