2013-07-16 2 views
1

Visual Studio를 통해 만든 dataGridView가 있습니다.dataGridView XML을로드하면 표에 새 열이 추가됩니다.

if (openfile.ShowDialog() == DialogResult.OK) 
     { 

      //Create xml reader 
      XmlReader xmlFile = XmlReader.Create(openfile.FileName, new XmlReaderSettings()); 
      DataSet dataSet = new DataSet(); 
      //Read xml to dataset 
      dataSet.ReadXml(xmlFile); 

      dataGridView1.DataSource = dataSet.Tables["whereClause"]; 

      //Close xml reader 
      xmlFile.Close(); 

     } 
:

if (savefile.ShowDialog() == DialogResult.OK) 
     { 

      DataSet ds = new DataSet(); 
      DataTable dt = new DataTable("whereClause"); 
      ds.Tables.Add(dt); 

      for (int i = 1; i < dataGridView1.Columns.Count + 1; i++) 
      { 
       DataColumn column = new DataColumn(dataGridView1.Columns[i - 1].Name); 

       dt.Columns.Add(column); 
      } 
      int ColumnCount = dataGridView1.Columns.Count; 
      foreach (DataGridViewRow dr in dataGridView1.Rows) 
      { 
       DataRow dataRow = dt.NewRow(); 
       for (int i = 0; i < ColumnCount; i++) 
       { 
        dataRow[i] = dr.Cells[i].Value; 
       } 
       dt.Rows.Add(dataRow); 
      } 

      XmlTextWriter newXml = new XmlTextWriter(savefile.FileName, Encoding.UTF8); 
      ds.WriteXml(newXml); 
      newXml.Close(); 
     } 

내가 다음 일치하는 부하 방법이 있습니다

enter image description here

나는 다음 다음 XML에 저장 사본 데이터 집합에 테이블 및 방법을 저장해야

내 문제는이 데이터를 다시로드 할 때 테이블 측면에 새 열을 만들고 기존 테이블 구조에 데이터를로드하지 않는다는 것입니다. DataSet.Merge를 살펴 보았지만 필요에 따라이 기능을 사용하기 위해 애썼다. XML을 다시로드하고이를 테이블 구조의 기존 열에 매핑하려면 어떻게해야합니까? 필요한 경우 테이블이로드되면 전체 테이블을 지울 수 있습니다.

+0

홀드 데이터 소스를 null로 설정하고 DataBind()를 호출 한 다음 DataSource를 dataSet.Tables [ "whereClause"]로 설정 하시겠습니까? –

답변

1

DataGridView AutoGenerateColumns의 속성을 false로 설정하십시오.

그러나 각 열을 수동으로 바인드 할 필드를 설정해야합니다. 예를 뒤에

<asp:GridView ID="gridView1" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="Forename" HeaderText="Column 1" /> <!-- state each column --> 
    </Columns> 
</asp:GridView> 

코드 : : 예를 들어

 List<Customer> cu = new List<Customer>(); 
     cu.Add(new Customer() { Forename = "Onam" }); 
     gridView1.DataSource = cu; 
     gridView1.DataBind(); 

public class Customer 
{ 
    public string Forename { get; set; } 
} 

또는 당신은 간단하게 할 수있는 (= true를 설정 AutoGenerateColumns와 함께) 다음 : 당신이 dataGridView1 리 바인딩하는 경우에

gridView1.DataSource = null; 
gridView1.DataBind(); 
gridView1.Columns.Clear(); 
gridView1.DataSource = dataSet.Tables["whereClause"]; 
gridView1.DataBind(); 
+0

이제 각 행에로드하는 빈 행을 추가합니다. – Joseph

+0

DataGrid의 각 열은 XML의 필드에 매핑됩니다. 위의 예제를 편집했습니다 :) –

관련 문제