2010-08-03 7 views
0

어떻게하면 datatable에 다른 행을 삽입 할 수 있습니까? 데이터 테이블은 dataGridView에서 로그를 쓰는 데 사용됩니다. 나는 런타임에 얼마나 많은 행이 필요한지 알 수 없을 때마다 데이터 테이블에 다른 행 (행)으로 쓸 때마다 필요합니다. 또 다른 것; 데이터 테이블은 XML 파일에서로드되므로 데이터 테이블에 이미 행이있을 수 있습니다.매번 새로운 행의 데이터 테이블을 작성하는 방법은 무엇입니까?

어떻게해야합니까? 여기 코드입니다 :

편집은 C#으로 (짧은에, 난 항상 같은 행에 쓰기) 어떤 이유에서

의 DateGridView는 isonly (하나 개의 행을 가진이 클릭 활성화하는 방법이다 단추의)

public void gridStart(string i, string b, string c) 
     { 
      DataTable dt = new DataTable();//empty table with no schema 
      DataColumn colContactID = new DataColumn("Date", typeof(string)); 
      DataColumn colContactName = new DataColumn("Caller", typeof(string)); 
      DataColumn colResult = new DataColumn("Result", typeof(string)); 
      dt.Columns.Add(colContactID); 
      dt.Columns.Add(colContactName); 
      dt.Columns.Add(colResult); 
      DataRow row = dt.NewRow(); 
      row["Date"] = i; 
      row["Caller"] = b; 
      row["Result"] = c; 
      dt.Rows.Add(row); 
} 
+0

하지 내가 제대로 질문을 이해한다면 당신이 필요로 할 때, 그런데 왜 당신은 데이터 테이블에 새 행을 추가 할 수 있는지? –

+0

이 테이블을 DataGrid에 바인딩하고 다른 행을 어떻게 추가하려고합니까? –

+0

다른 행, 동일한 구문, 다른 이름을 추가하려고했습니다. –

답변

1

당신은 DataTable.NewRow()를 사용할 수 있어야합니다. MSDN 페이지에는 여러 샘플이 있습니다. 더 궁금한 점이 있다면 답변에 몇 가지 샘플 코드를 제공해주십시오. (무엇처럼 방법이 게시물에하고있다) 데이터 소스가 데이터 소스에 바인딩되어있는 경우, 먼저 데이터 소스를 얻을 필요가

private void Form1_Load(object sender, EventArgs e) 
{ 
    dataGridView1.DataSource = MyDataTable; 
} 

private string _fileName = "MyCache.xml"; 

private DataTable _myDataTable; 
public DataTable MyDataTable 
{ 
    get 
    { 
     if (_myDataTable == null) 
     { 
      _myDataTable = new DataTable(); 
      if (File.Exists(_fileName)) 
       _myDataTable.ReadXml(_fileName); 
      else 
       InitDataTable(_myDataTable); 
     } 
     return _myDataTable; 
    } 
} 

private void InitDataTable(DataTable table) 
{ 
    table.TableName = "MyTable"; 
    table.Columns.Add("Date", typeof(DateTime)); 
    table.Columns.Add("Caller", typeof(string)); 
    table.Columns.Add("Result", typeof(string)); 
} 

// Have your add code call this method! 
private void AddValue(DateTime date, string caller, string result) 
{ 
    var row = MyDataTable.NewRow(); 
    row["Date"] = date; 
    row["Caller"] = caller; 
    row["Result"] = result; 
    MyDataTable.Rows.Add(row); 
} 

protected override void OnClosed(EventArgs e) 
{ 
    if (_myDataTable != null) 
     _myDataTable.WriteXml(_fileName, XmlWriteMode.WriteSchema); 
    base.OnClosed(e); 
} 
+0

더 많은 정보를 추가했습니다. –

+0

@ 길라드, 내가 묻는 것보다 조금 더 추가했지만 도움이되기를 바랍니다. 'AddValue (...) '메소드의 매개 변수로 행을 추가하려는 테이블을 전달할 수도 있습니다. –

+0

컴파일러가 "File.Exists"를 인식하지 못합니다 어떤 네임 스페이스를 사용해야합니까? –

1

,

// Assuming it's a DataTable 
DataTable dt = ((DataTable)myDataGridView.DataSource); 

삽입 행 그런 다음 내용을 새로 고치도록 뷰를 지시하십시오.

public void gridStart() 
{ 
    DataTable dt = new DataTable(); 
    DataColumn colContactID = new DataColumn("Date", typeof(string)); 
    DataColumn colContactName = new DataColumn("Caller", typeof(string)); 
    DataColumn colResult = new DataColumn("Result", typeof(string)); 
    dt.Columns.Add(colContactID); 
    dt.Columns.Add(colContactName); 
    dt.Columns.Add(colResult); 
    dataGridView1.DataSource = dt; 
    // Call method to insert values. 
} 

그리드를 시작하고, :

그래서 어쩌면이 같은 작동 것이다 당신이 당신의 DataTable에 데이터를 삽입 할 때

public void gridInsert(string i, string b, string c) 
{ 
    DataTable dt = (DataTable)myDataGridView.DataSource; 
    DataRow row = dt.NewRow(); 
    row["Date"] = i; 
    row["Caller"] = b; 
    row["Result"] = c; 
    dt.Rows.Add(row); 
    // Call another method to refresh grid view. 
} 

호출 할 수 있습니다.

+0

그게 내가 한 짓이야, 작동하지 않습니다. 제 코드가 잘못 됐는지 말해 줄 수 있습니까? –

+0

방금 ​​내 대답을 편집했습니다. DataGridView가 DataTable과 같은 데이터 소스에 바인딩되어 있는지 여부를 쉽게 알 수 있습니다. – duraz0rz

+0

예, 다음과 같습니다. dataGridView1.DataSource = dt; –

0

내 솔루션 :

public partial class _Default : System.Web.UI.Page 
{ 
    DataTable tb = new DataTable(); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack == false) 
    { 
     DataTable dt = new DataTable("table"); 
     dt.Columns.Add(new DataColumn("NR", Type.GetType("System.Int32"))); 
     dt.Columns.Add(new DataColumn("Dihname", Type.GetType("System.String"))); 
     dt.Columns.Add(new DataColumn("ing", Type.GetType("System.String"))); 
     dt.Columns.Add(new DataColumn("Cost", Type.GetType("System.String"))); 
     Session["ss"] = dt; 
    } 
    protected void LinkButton1_Click(object sender, EventArgs e) 
    { 
     tb = (DataTable)Session["ss"]; 
     DataRow r1 = tb.NewRow(); 
     r1[0] = ViewState["dishid"].ToString(); 
     r1[1] = ViewState["dishname"]; 
     r1[3] = Label3.Text; 
     tb.Rows.Add(r1); 
     DataList5.DataSource = tb; 
     DataList5.DataBind(); 
    } 
} 
+1

글쎄, 고마워. . . 조금 늦었지만. 어쨌든 ASP.NET을 사용하지 않았습니다. –

관련 문제